【发布时间】:2018-07-23 23:42:33
【问题描述】:
昨天我遇到了下面提到的错误,所以我开始在stackoverflow上寻找类似的问题……但似乎没有一个有帮助:(
我的猜测是我没有得到服务器的响应,但我想不出如何解决这个问题。我在其他一些活动中使用相同的代码(当然还有其他功能),但它们都工作得很好。 唯一改变的是我第一次使用更新表,但我看不出这将如何导致以下错误。
我希望你能帮助我。
奇怪的是如果
$anzahlrows == 1
是真的,并且查询的 php 文件中没有比我在 android 中得到的错误更多的错误(像往常一样):
Register Response: {"success":true,"error_msg":"Sie wurden erfolgreich angelegt!"}
I/jsonResponse: {"success":true,"error_msg":"Sie wurden erfolgreich angelegt!"}
一切正常……
这是我得到的错误:
org.json.JSONException: End of input at character 0 of
在行
JSONObject jsonResponse = new JSONObject(response);
这是android studio中的代码:
Response.Listener<String> responseListener = new Response.Listener<String>() {
// this gets called on response
@Override
public void onResponse(String response) {
Log.d("Response:", "Register Response: " + response);
// check for boolean success from php
try {
JSONObject jsonResponse = new JSONObject(response);
Log.i("jsonResponse", jsonResponse.toString());
boolean success = jsonResponse.getBoolean("success");
// if true from php start LoginActivity
if (success){
Toast.makeText(RegisterActivity.this, jsonResponse.getString("error_msg"), Toast.LENGTH_LONG).show();
Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
RegisterActivity.this.startActivity(intent);
}
// if false build an AlertDialog
else {
Toast.makeText(RegisterActivity.this, jsonResponse.getString("error_msg"), Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
// call register request and transfer string username and password
RegisterRequest registerRequest = new RegisterRequest(email, password, matrikelnummer, firstName, surname, responseListener);
RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
queue.add(registerRequest);
这是我的 PHP 文件:
if (isset($_POST["email"]) or isset($_POST["password"]) or isset($_POST["matrikelnummer"]) or isset($_POST["firstName"]) or isset($_POST["surname"])) {
$email = $_POST["email"];
$password = $_POST["password"];
$matrikelnummer = $_POST["matrikelnummer"];
$firstName = $_POST["firstName"];
$surname = $_POST["surname"];
$query = "SELECT * FROM Users WHERE Matrikelnummer ='$matrikelnummer'";
if ($result=mysqli_query($con,$query)) {
$anzahlrows = mysqli_num_rows($result);
if($anzahlrows == 1) {
$query = "UPDATE Users SET email = '$email' ,password = '$password',firstName = '$firstName', surname = '$surname' WHERE Matrikelnummer = '$matrikelnummer'";
if ($result=mysqli_query($con,$query)) {
$response["success"] = TRUE;
$response["error_msg"] = "Sie wurden erfolgreich angelegt!";
echo json_encode($response);
exit;
} else {
$response["success"] = FALSE;
$response["error_msg"] = "Fehler bei der INSERT SQL Abfrage";
echo json_encode($response);
exit;
}
}
else {
$response["success"] = FALSE;
$response["error_msg"] = "Die angegebene Matrikelnummer ist nicht verfügbar";
echo json_encode($response);
exit;
}
}
else {
$response["success"] = FALSE;
$response["error_msg"] = "Fehler bei der SQL Abfrage";
echo json_encode($response);
exit;
}
}
else {
$response["success"] = FALSE;
$response["error_msg"] = "Required parameters missing!";
echo json_encode($response);
exit;
}
日志显示如下:
D/Response:: Register Response:
W/System.err: org.json.JSONException: End of input at character 0 of
W/System.err: at org.json.JSONTokener.syntaxError(JSONTokener.java:449)
W/System.err: at org.json.JSONTokener.nextValue(JSONTokener.java:97)
W/System.err: at org.json.JSONObject.<init>(JSONObject.java:156)
.
.
.
【问题讨论】:
-
您声明 ::“一切正常......这是我得到的错误:”如果一切正常,那么问题出在哪里?或者,如果您收到导致错误的响应,请显示导致错误的 JSON 响应!
-
@Barns 如果 $anzahlrows == 1 为真,它可以正常工作......但是当 php 文件应该执行任何它应该发送成功为假的东西时,输出只是什么都没有......或者换句话说,jsonresponse就像你在日志中看到的一样
-
我通常用我的 PHP 代码做的是在我输入我的 'if (isset($_POST["email"]) ` 代码开始之前创建一个响应。然后在每个
if/else语句创建一个适当的响应——就像你有的一样,除了我不回显响应并退出。我的最后一个语句是我使用回显响应的地方,这样无论之间发生什么,它都会回显我的响应。我将发布一个示例几分钟后。
标签: php android json exception android-volley