从Android中的JSON嵌套循环获取数据时出错

时间:2013-03-25 07:37:39

标签: java android json

我试过这个但是在for loop optJSONObject(i)

中遇到错误
{
    "response": {
        "code": 1,
        "message": "success"
    },
    "data": {
        "updates": [
                    {
                        "id":"67",                  
                        "date":"6 months ago",
                        "update_type": "7",
                        "update_id": "67",
                        "name":"ravi"
                    },
                    {
                        "id":"68",                  
                        "date":"3 months ago",
                        "update_type": "5",
                        "update_id": "68",
                        "name":"paresh"
                    },

                    {
                        "id":"69",                  
                        "date":"1 months ago",
                        "update_type": "6",
                        "update_id": "69",
                        "name":"sampath"
                    },

                    {
                        "id":"62",                  
                        "date":"9 months ago",
                        "update_type": "6",
                        "update_id": "62",
                        "name":"raju"
                             }
        ]
    }
}

我为此尝试的代码是:

try {
    InputStream is = null;

    is =  getApplicationContext().getResources().openRawResource(R.raw.myfile);


    //CONVERTS STREAM OBJ IN STRING OBJ
    mJSONString             =   convertStreamToString(is);
    JSONObject obj          =   new JSONObject(mJSONString);
    JSONObject dataobj      =   obj.getJSONObject("data");
    JSONObject updateobj    =   dataobj.getJSONObject("update");

    //System.out.println(new JSONObject(update)toString(2));
    for(int i=0; i<updateobj.length(); i++){

        JSONObject object       =   updateobj.optJSONObject(i);
        mUpdates                =   new Mobile_UpdateActivity();

        mUpdates.update_id      =   object.getString("update_id");
        mUpdates.site_id        =   object.getString("site_id");
        mUpdates.update_type    =   object.getString("update_type");

        System.out.println(mUpdates.update_id);
        System.out.println(mUpdates.site_id);
        System.out.println(mUpdates.update_type);
    }

}

但我在** optJSONObject(i)

面临错误
  

错误:JSONObject类型中的方法optJSONObject(String)不是   适用于参数(int)**

2 个答案:

答案 0 :(得分:0)

您收到以下警告:

  

optJSONObject(i)错误:类型中的方法optJSONObject(String)   JSONObject不适用于参数(int)

因为在当前的json字符串中updatesJSONArray而不是JSONObject,但是您正在尝试将JSONArray转换为JSONObject。您正在为JsonObject调用JsonObject.optJSONObject需要一个String作为参数而不是JSONArray.optJSONObject,它需要当前JsonArray中的item索引。更改您的代码以避免当前警告:

    //...your code here...
    JSONObject obj          =   new JSONObject(mJSONString);
    JSONObject dataobj      =   obj.getJSONObject("data");

    // get update jsonArray from dataobj JSONObject 
    JSONArray updateobj    =   dataobj.getJSONArray("update");
    //...your code here...

答案 1 :(得分:0)

尝试替换行:

JSONObject updateobj    =   dataobj.getJSONObject("update");

JSONArray updateobj    =   dataobj.getJSONArray("update");

然后进入for循环:

JSONObject object       =   updateobj.optJSONObject(i);

JSONObject object       =   updateobj.get(i);