我的jsonarry的json解析器只获取第一个元素

时间:2017-02-20 09:20:22

标签: java android

我有解析器函数,解析json数组并返回我在列表适配器中使用它的数组,然后适配器由recyclerview使用。它给出了实际的长度,但只填充了数组的第一个元素其他人返回NULL

这是我的代码

 public void parsee_item() {
    JSONObject jsonObject = null;
    try {
        jsonObject = new JSONObject(json);
       final JSONArray userss = jsonObject.getJSONArray(JSON_ARRAY);
        item_id = new String[userss.length()];
        item_owner = new String[userss.length()];
        item_images = new String[userss.length()];
        item_names = new String[userss.length()];
        item_price = new String[userss.length()];
        item_place = new String[userss.length()];


        JSONObject jo = null;
        for (int i = 0; i < userss.length();i++) {
            jo = userss.getJSONObject(i);
            Log.d("alrsp", jo.toString());
            item_id[i] = jo.getString(KEY_ID);
            item_owner[i] = jo.getString(KEY_OWNER);
            item_images[i] = jo.getString(KEY_IMAGE);
            item_names[i] = jo.getString(KEY_NAME);
            item_price[i] = jo.getString(KEY_PRICE);


        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

json是

   {
    "result": [{
        "item_id": "10",
        "owner": "user",
        "item_type_id": "1",
        "url1": "http:\/\/localhost:8080\/market\/items\/14.1.png",
        "name": "jc",
        "price": "76"
    }, {
        "item_id": "12",
        "owner": "user",
        "item_type_id": "1",
        "url1": " http:\/\/localhost:8080\/market\/items\/14.1.png",
        "name": "nzbsbsb",
        "price": "0"
    }, {
        "item_id": "13",
        "owner": "user",
        "item_type_id": "1",
        "url1": " http:\/\/localhost:8080\/market\/items\/14.1.png",
        "name": "uygf",
        "price": "0"
    }]
}

以及此列表的屏幕截图 enter image description here

7 个答案:

答案 0 :(得分:2)

不建议自己解析json,而是使用Json Parse Util,例如GsonfastJson

答案 1 :(得分:1)

enter image description here

我使用了你的代码,调试,找到的值被更新了它们没有JSON配对的错误,所以检查你的Recycler视图适配器代码或分享它

答案 2 :(得分:0)

替换此行

jo = userss.getJSONObject(4);

使用此

jo = userss.getJSONObject(i);

答案 3 :(得分:0)

     JSONObject jo = null;
    for (int i = 0; i < userss.length();i++) {
        jo = userss.getJSONObject(i);
        Log.d("alrsp", jo.toString());
        item_id[i] = jo.getString(KEY_ID);
        item_owner[i] = jo.getString(KEY_OWNER);
        item_images[i] = jo.getString(KEY_IMAGE);
        item_names[i] = jo.getString(KEY_NAME);
        item_price[i] = jo.getString(KEY_PRICE);
        item_place[i] = jo.getString("place");


    }

答案 4 :(得分:0)

我收到的是一个没有被jsonarray发送的参数

item_place[i] = jo.getString("place")

答案 5 :(得分:0)

你的代码问题是你使用硬编码值4

{visible- true}

注意这种用法

        jo = userss.getJSONObject(4);

每次解析索引4 jsonObject信息

    jo = userss.getJSONObject(i);

}

如果使用这种类型的解析,则可能导致空指针异常

答案 6 :(得分:0)

您可以按如下方式解析JSON以上

private void jsonParse(String response) throws JSONException {
        JSONObject jsonObject = new JSONObject(response);
        JSONArray jsonArray = jsonObject.getJSONArray("result");
        if (jsonArray != null && jsonArray.length() > 0) {
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject object = jsonArray.getJSONObject(i);
                if (object != null) {
                    String itemId = object.getString("item_id");
                    String owner = object.getString("owner");
                    String item_type_id = object.getString("item_type_id");
                    String url1 = object.getString("url1");
                    String name = object.getString("name");
                    String price = object.getString("price");
                }
            }
        }
    }