Android解析json强制停止

时间:2016-03-25 09:57:12

标签: android json

我正在解析一个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();
    }
}

2 个答案:

答案 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为空,因此错误为。

- 你应该知道what is NullPointerException

答案 1 :(得分:0)

问题在于这一行

JSONArray jArray = json.getJSONArray("name");

没有名称为name的数组。它失败了。纠正此部分以正确获取阵列。休息看起来很好。