我正在解析一个json url:http://www.json-generator.com/api/json/get/bQmwsOmYeq?indent=2但是我未能实现它。我收到了一个错误。这段代码出了什么问题?
public void parseJsonResponse(String result) {
Log.i(TAG, result);
pageCount++;
try {
JSONObject json = new JSONObject(result);
JSONArray jArray = json.getJSONArray("name");
for (int i = 0; i < jArray.length(); i++) {
JSONObject jObject = jArray.getJSONObject(i);
CountryInfor country = new CountryInfor();
country.setId(jObject.getString("id"));
country.setName(jObject.getString("name"));
countries.add(country);
}
adapter.notifyDataSetChanged();
if (dialog != null) {
dialog.dismiss();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
答案 0 :(得分:1)
替换
JSONObject json = new JSONObject(result);
JSONArray jArray = json.getJSONArray("name");
这两行
JSONArray jArray = new JSONArray(result);
同时更改
country.setId(jObject.getString("id"));
通过
country.setId(jObject.getInt("id") + "");
因为
id
的类型为int
而不是String
。
它会正常工作。
您收到的回复如
[
{
"id": 1,
"name": "Vietnam"
},
{
"id": 2,
"name": "China"
},
{
"id": 3,
"name": "USA"
},
{
"id": 4,
"name": "England"
},
{
"id": 10,
"name": "Russia"
}
]
所以回复是JSONArray
而不是JSONObject
。
希望它会有所帮助。
修改强>
@Override
protected String doInBackground(Void... params) {
// call load JSON from url method
if(loadJSON(this.url) != null) {
return loadJSON(this.url).toString();
}
Log.d("LoadJSONFromUrl", "Failed to get JSONObject.");
return null;
}
您的JSONObject
为空,因此错误为。
NullPointerException
答案 1 :(得分:0)
问题在于这一行
JSONArray jArray = json.getJSONArray("name");
没有名称为name
的数组。它失败了。纠正此部分以正确获取阵列。休息看起来很好。