2016-12-14 2 views
0

У меня есть структура 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(); 
        } 
       } 
+0

как вы разбираете свой json, делаете это вручную или используете любую библиотеку, такую ​​как GSON. –

+0

'new JSONObject (« object »)' что вы думаете, что делает? – njzk2

+0

Привет, Равиндер, я добавил свой кодовый блок. Не могли бы вы проверить его? Я думаю, что делаю все правильно, но это не сработает. – nuhkoca

ответ

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) { 

       } 
      }); 
+0

Эй, это сработало для меня. Благодаря! – nuhkoca

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; таких как GSON, Moshi или Jackson. Существует хороший учебник о том, как сделать пользовательский запрос с помощью Volley, чтобы использовать эти библиотеки в training documentation.

+0

Эй, это сработало для меня. Ты обалденный. Благодаря! – nuhkoca

Смежные вопросы