JSONException:名称必须是字符串
Posted
技术标签:
【中文标题】JSONException:名称必须是字符串【英文标题】:JSONException: Names must be strings 【发布时间】:2016-02-26 05:22:38 【问题描述】:我正在尝试为 android 应用程序进行登录和注册活动。注册活动工作正常,它可以将信息存储到托管在托管上的我的 Sql 数据库中,但登录活动给了我这个错误......
org.json.JSONException: Names must be strings, but "username":"bryan625","name":"bryan penaloza","sex":"male","age":21,"password" :"test" 在 "username":"bryan625","name":"bryan penaloza","sex":"male","age":21 的字符 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);
?>
我知道我已成功连接到数据库,因为它返回了我为特定用户存储的值数组,但我不知道如何摆脱该错误。谢谢!
【问题讨论】:
哪一行导致错误? 我不确定,它只是在字符 88 "username":"bryan625","name":"bryan penaloza","sex":"male","age ":21,"password":"test" 我在上面的问题中发布了错误 你能分享一个带有 PHP 响应的 sn-p 吗? 【参考方案1】:啊,简单的错误。您会注意到 char 88 是 json 字符串中倒数第二个 。你需要改变:
new JSONObject("" + result + "")
到 new JSONObject(result)
。封装的 已经包含在 PHP 中了。
将您的 JSON 传递给 JSON 验证器也指出了问题:
输入:
"username": "bryan625", "name": "bryan penaloza", "sex": "male", "age": 21, "password": "test"
输出:
Parse error on line 1: "username" -----^ Expecting 'STRING', ''
您为已经有效的 JSON 添加了额外的括号。正确的 JSON 对象如下:
"username": "bryan625",
"name": "bryan penaloza",
"sex": "male",
"age": 21,
"password": "test"
【讨论】:
啊谢谢,它不再给我错误,但它仍然没有做我想做的事情。它应该打开一个显示用户信息的新活动,所以我猜到下一个错误......大声笑 欢迎编程! 下一个错误/错误几乎就是游戏的名称。 ;) 相信我,我知道我正在为这个应用程序做的课程是这样的:“去做一个 android 应用程序并自学代码。” 我得到了,org.json.JSONArray 类型的 Value [] 无法转换为 JSONObject 你知道这是为什么吗? 我会打印出你的 PHP 输入。我怀疑你有[]
(一个空数组)。这不能转换为对象。以上是关于JSONException:名称必须是字符串的主要内容,如果未能解决你的问题,请参考以下文章
JSONException 故障排除:在字符 0 Android 处输入结束
Volley JSONException:输入在字符 0 处结束
FastJson处理数据出现错误 com.alibaba.fastjson.JSONException: syntax error, expect {, actual error, pos 1(示例代