如何到达图像节点

时间:2016-12-14 20:32:56

标签: android json android-volley

我有一个像下面这样的JSON结构,我无法以任何方式访问图像节点。我怎么能用Volley库做到这一点?任何想法都会有所帮助。提前谢谢。

{
  "nodes": [
    {
      "node": {
        "id": "2536",
        "title": "Die Düsseldorfer Rabbiner",
        "image": {
          "src": "how to reach here",
          "alt": "",
          "title": "© Landeshauptstadt Düsseldorf/Michael Gstettenbauer"
        },
        "body": "some text",
        "category": "Deutsch",
        "created": "1481344134",
        "url": "some text"
      }
    }
  ]
}

代码块

JsonArrayRequest getRequest = new JsonArrayRequest(
            url,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    try {
                        JSONObject jsonObject = new JSONObject("response");
                        JSONArray jsonArray = jsonObject.getJSONArray("nodes");
                        for(int i = 0; i<jsonArray.length(); i++){
                            JSONObject jo = jsonArray .getJSONObject(i);
                            String name = jo.getString("category");

                            Toast.makeText(context, name, Toast.LENGTH_LONG).show();

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

2 个答案:

答案 0 :(得分:1)

您的Java模型应与JSON 完全匹配。 JSON模式中的基本元素是对象,而不是数组;因此,您的请求应该是JSONObjectRequest,而不是JSONArrayRequest

JSONObjectRequest request = new JSONObjectRequest(url,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONArray response) {
                    try {
                        JSONArray nodes = response.getJSONArray("nodes");
                        for(int i = 0; i < nodes.length; i++) {
                            JSONObject obj = nodes.getJSONObject(i);
                            JSONObject node = obj.getJSONObject("node");
                            JSONObject image = node.getJSONObject("image");
                            String title = image.getString("title");

                            Toast.makeText(context, title, Toast.LENGTH_LONG).show();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            });

正如您可能会看到的,如果您拥有大型数据集,这可能会变得乏味。这就是为什么我强烈建议使用JSON解析库;例如GSONMoshiJackson。有一个关于如何使用Volley在training documentation中使用这些库的自定义请求的好教程。

答案 1 :(得分:1)

From the look of things you should  use JsonObjectRequest instead  JsonArrayRequest.

 JsonObjectRequest request=new JsonObjectRequest(url, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {

                    try {
                        JSONArray  array = response.getJSONArray("nodes");
                        for(int i=0;i<array.length();i++){
                            JSONObject object= array.getJSONObject(i);
                            JSONObject imageObject= object.getJSONObject("node").getJSONObject("image");
                            Toast.makeText(TestActivity.this, imageObject.toString(), Toast.LENGTH_LONG).show();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            });