为什么我无法在json中访问此数组

时间:2017-03-27 06:52:03

标签: android arrays json

我正试图在这个json bellow中获取这些图像数组并将其显示在GridView中,但我不知道为什么我无法达到它

[
  {
    "id": 385,
    "title": "this title",
    "image": "logo.png",
    "description": "description ",
    "images": [
      "logo.png",
      "image1.png"
    ],
    "user_name": "my name",
    "telephone": "0123456789",
    "city_name": "جدة",
    "created_at": "2017-03-20T17:51:16+00:00",
    "time_ago": "6 days ago",
    "user_id": 159
  }
]

这是我完整的AyncTask。

     private class AysncImages extends AsyncTask<String, Void, Integer> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            // pDialog = new ProgressDialog(getActivity());
            // pDialog.setMessage("Please wait...");
            // pDialog.setCancelable(false);
            // pDialog.show();

        }

        @Override
        protected Integer doInBackground(String... arg0) {
            // Building Parameters
            HttpHandler sh = new HttpHandler();

            String jsonStr = sh.makeServiceCall(String.valueOf(Config.BASE_URL));

            //jsonStr = sh.makeServiceCall(url + 373); //or url + ID
            Log.i(TAG, "doInBackground Image: " + jsonStr);

            if (jsonStr != null) {
                try 
                {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    JSONArray arrayObj = jsonObj.getJSONArray("images");

                    Log.i(TAG, "array: "+ jsonObj);

                    GridItem item = new GridItem();
                    for (int i = 0; i < arrayObj.length(); i++) {
                        String images = arrayObj.getString(i);


                        Log.i(TAG, "parseResult: " + jsonObj);
                        item.setImage(IMAGE_LINK + images);//IMAGE_LINK +

                        Log.i(TAG, "parseResult: " + IMAGE_LINK + " " + images);
                        mGridData.add(item);

                    }
                    // Getting JSON Array node
                } catch (JSONException e1) {
                    e1.printStackTrace();
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(Integer result) {
            // if (result == 1) {
                mGridAdapter.setGridData(mGridData);
            //} else {
            //  Toast.makeText(getActivity(), "Failed to fetch data!", Toast.LENGTH_SHORT).show();
            // }

            //Hide progressbar
            mProgressBar.setVisibility(View.GONE);
        }
    }

在我的日志中,我无法联系到jsonObjarrayObj我只能达到jsonStr我错过的内容?

我的日志为jsonStr

enter image description here

3 个答案:

答案 0 :(得分:0)

试试这个..

<select ng-options="user as user.name for user in processMapAttrib.auditNotifyUsers.unAssignedUsers" 
    ng-model="selectedOption"></select>

答案 1 :(得分:0)

试试这个,

try {
    JSONArray jArr = new JSONArray(jsonStr);
    for (int i = 0; i < jArr.length(); i++) {
        JSONObject Obj = jArr.getJSONObject(i);
        String id=Obj.getString("id");
        String title=Obj.getString("title");
        String description=Obj.getString("description");

        JSONArray image_arr=Obj.getJSONArray("images");
        for (int j = 0; j < image_arr.length(); j++) {
            String value=image_arr.getString(j);
            Log.d("TAG","value:"+value);
        }
    }
 } catch (JSONException e1) {
    e1.printStackTrace();
}

答案 2 :(得分:0)

首先,看看你的Json定义:

[
  {
    "id": 385,
    "title": "this title",
    ...
  }
]

还要看看你在代码中访问Json的方式:

String jsonStr = sh.makeServiceCall(String.valueOf(Config.BASE_URL));
JSONObject jsonObj = new JSONObject(jsonStr);
JSONArray arrayObj = jsonObj.getJSONArray("images");

在你的代码中,jsonObj应该是你json的根对象,但如果仔细观察,你的json 没有根节点。 You Json在根级别是数组。这就是您无法访问jsonObj的原因,因此也就是您无法访问images数组的原因。

要解决此问题,您有两个选择:

1)通过删除[],使服务器返回对象而不是数组。 E.g。

{
    "id": 385,
    "title": "this title",
    ...
}

2)将代码更改为开始读取根作为数组的第一个位置。 E.g:

String jsonStr = sh.makeServiceCall(String.valueOf(Config.BASE_URL));
JSONArray jsonArray = new JSONArray(jsonStr);
JSONObject jsonObj = jsonArray.get(0);
JSONArray arrayObj = jsonObj.getJSONArray("images");

(正如旁注:我还没有在Android上编程一段时间,所以我不确定上面代码的正确性)

如果您可以更改服务器,则最好选择1。