我正在尝试为 Android 应用程序创建登录和注册 Activity 。注册 Activity 工作正常,它可以将信息存储到托管在托管上的我的 Sql 数据库中,但登录 Activity 给了我这个错误...
org.json.JSONException:名称必须是字符串,但 {"username":"bryan625","name":"bryan penaloza","sex":"male","age":21,"password":"test "} 在 {{"username":"bryan625","name":"bryan penaloza","sex":"male","age":21,"password"的第 88 位是 org.json.JSONObject 类型:“测试”}}
这是在我的 ServerRequest.java 类中获取用户数据的部分
我知道我使用的是已弃用的代码,但我修改了 gradle 使其正常工作。
public class fetchUserDataAsyncTask extends AsyncTask<Void, Void, User> {
User user;
GetUserCallback userCallback;
public fetchUserDataAsyncTask(User user, GetUserCallback userCallback) {
this.user = user;
this.userCallback = userCallback;
}
@Override
protected User doInBackground(Void... params) {
ArrayList<NameValuePair> dataToSend = new ArrayList<>();
dataToSend.add(new BasicNameValuePair("username", user.username));
dataToSend.add(new BasicNameValuePair("password", user.password));
HttpParams httpRequestParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpRequestParams, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpRequestParams, CONNECTION_TIMEOUT);
HttpClient client = new DefaultHttpClient(httpRequestParams);
HttpPost post = new HttpPost(SERVER_ADDRESS + "FetchUserData.php");
User returnedUser = null;
try {
post.setEntity(new UrlEncodedFormEntity(dataToSend));
HttpResponse httpResponse = client.execute(post);
HttpEntity entity = httpResponse.getEntity();
String result = EntityUtils.toString(entity);
JSONObject jObject = new JSONObject("{" + result + "}");
if (jObject.length() == 0) {
returnedUser = null;
} else {
String name = jObject.getString("name");
String sex = jObject.getString("sex");
int age = jObject.getInt("age");
returnedUser = new User(user.username, name, sex, age, user.password);
}
} catch (Exception e) {
e.printStackTrace();
}
return returnedUser;
}
@Override
protected void onPostExecute(User returnedUser) {
progressDialog.dismiss();
userCallback.done(user);
super.onPostExecute(returnedUser);
}
}
这是此代码正在调用的我的 php 文件。
<?php
/*server, user, password, databse */
$conn=mysqli_connect("xxx", "xxx", "xxx","xxx");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$password = $_POST["password"];
$username = $_POST["username"];
$statement = mysqli_prepare($conn, "SELECT * FROM User WHERE username = ? AND password = ?");
if($statement === FALSE){ die(mysqli_error($conn)); }
mysqli_stmt_bind_param($statement, "ss", $username, $password);
mysqli_stmt_execute($statement);
//printf("Error: %s.\n", mysqli_stmt_error($statement));
mysqli_stmt_store_result($statement);
mysqli_stmt_bind_result($statement, $id, $username, $name, $sex, $age, $password);
$user = array ();
while(mysqli_stmt_fetch($statement)){
$user['username'] = $username;
$user['name'] = $name;
$user['sex'] = $sex;
$user['age'] = $age;
$user['password'] = $password;
}
echo json_encode($user);
mysqli_close($conn);
?>
我知道我已成功连接到数据库,因为它正在返回我为特定用户存储的值数组,但我不知道如何摆脱该错误。谢谢!
最佳答案
啊, 简单的错误 。您会注意到 char 88 是 json 字符串中倒数第二个 }
。你需要改变:new JSONObject("{" + result + "}")
到 new JSONObject(result)
。封装的 {}
已经包含在 PHP 中。
将您的 JSON 传递到 JSON validator 也指出了这个问题:
您向已经有效的 JSON 添加了额外的括号。正确的 JSON 对象如下:
{
"username": "bryan625",
"name": "bryan penaloza",
"sex": "male",
"age": 21,
"password": "test"
}
关于java - JSONException : Names must be strings,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33882304/