我正在从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
中收到错误。怎么了?
答案 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);
}