为什么我得到空的JSON响应?

时间:2019-07-18 11:03:03

标签: android json

我正在从JSON到android提取数据。但是,我得到了一个空的JSON响应。生成PHP数据的JSON代码如下:

$result = $conn->query("SELECT dbname FROM users ORDER BY dbname ASC");
//defined second array for dbnames' list
$dblist = array();
while($row = $result->fetch_assoc()){
    //array_push($response['dblist'],$row['dbname']);
    $dblist[] = array('name'=>$row['dbname']);
}
$response['dblist'] = $dblist;

这是JSON的回复。

{"dblist":[{"name":"a"},{"name":"arsod"}]}

要在Java中获取数据的android代码如下:

JSONObject obj = new JSONObject(s);
JSONArray names = obj.getJSONArray("dblist");

for(int i=0; i < names.length(); i++) {
    JSONObject n = names.getJSONObject(i);
    String name = n.getString("name");
    Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show();
    institutes.add(name);
}

其中institutes是一个ArrayList,我想在其中添加每个提取的元素。但是在获取数据时,我在logcat org.json.JSONException: End of input at character 0 of中收到错误。怎么了?

2 个答案:

答案 0 :(得分:0)

删除此行:

JSONObject object = obj.getJSONObject("dblist");

并将所有object.的出现替换为obj.

您的JSONObject obj不包含"dblist"对象,其中仅包含数组,因此您应该直接在getJSONArray("dblist")内寻找obj

编辑:您正在解析不同的String s,我刚刚检查了这段代码:

final String s = "{\"dblist\":[{\"name\":\"a\"},{\"name\":\"arsod\"}]}";
JSONObject obj = new JSONObject(s);
JSONArray names = obj.getJSONArray("dblist");

for (int i = 0; i < names.length(); i++) {
    JSONObject n = names.getJSONObject(i);
    String name = n.getString("name");
    Toast.makeText(this, name, Toast.LENGTH_SHORT).show();
}

几乎与您完全相同,并且效果很好...

答案 1 :(得分:0)

考虑以下几点:

s = {"dblist":[{"name":"a"},{"name":"arsod"}]}

您的代码应类似于

JSONObject obj = new JSONObject(s);
JSONArray names = obj.getJSONArray("dblist");

for(int i=0; i < names.length(); i++) {
    JSONObject n = names.getJSONObject(i);
    String name = n.getString("name");
    Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show();
    institutes.add(name);
}