2015-09-10 1 views
0

Это мой JSONКак получить данные из JSONобъекта и отобразить его в виде списка?

{ 
    "data": [ 
     { 
      "id": 1, 
      "Name": "Choc Cake", 
      "Image": "1.jpg", 
      "Category": "Meal", 
      "Method": "", 
      "Ingredients": [ 
       { 
        "name": "1 Cup Ice" 
       }, 
       { 
        "name": "1 Bag Beans" 
       } 
      ] 
     }, 
     { 
      "id": 2, 
      "Name": "Ice Cake", 
      "Image": "dfdsfdsfsdfdfdsf.jpg", 
      "Category": "Meal", 
      "Method": "", 
      "Ingredients": [ 
       { 
        "name": "1 Cup Ice" 
       } 
      ] 
     } 
    ] 
} 

Теперь я пытаюсь отобразить его в ListView, как бы я это сделать, это то, что я есть сейчас (для целей тестирования я просто пытаюсь отобразить все имена в тост)

JSONObject jsonObj = new JSONObject(jsonStr); 
int length = jsonObj .length(); 

for(int i=0; i<length; i++) { 
    Toast.makeText(this, jsonObj.getJSONArray("data"). 
     getJSONObject(i).getString("Name"), Toast.LENGTH_LONG).show(); 
} 

В вышеуказанном коде отображается только одно имя, а не несколько имен. Как я могу сделать это для нескольких имен?

+0

Отображение его одновременно в тосте сделает их невозможными. В целях тестирования вы можете использовать Logcat – Pelocho

+0

, чтобы проверить этот код: http: // stackoverflow.com/questions/16997245/android-display-json-object-to-listview –

+0

у вас может быть arraylist строки типа и добавить данные, которые вы хотите отобразить на нем, теперь используйте этот arraylist при создании адаптера для вашего списка. –

ответ

1

посмотрите этот фрагмент кода

//getting whole json string 
JSONObject jsonObj = new JSONObject(jsonStr); 

//extracting data array from json string 
JSONArray ja_data = jsonObj.getJSONArray("data"); 
int length = jsonObj .length(); 

//loop to get all json objects from data json array 
for(int i=0; i<length; i++) 
{ 
    JSONObject jObj = ja_data.getJSONObject(i); 
    Toast.makeText(this, jObj.getString("Name").toString(), Toast.LENGTH_LONG).show(); 

    // getting inner array Ingredients 
    JSONArray ja = jObj.getJSONArray("Ingredients"); 
    int len = ja.length(); 

    // getting json objects from Ingredients json array 
    for(int j=0; j<len; j++) 
    { 
     JSONObject json = ja.getJSONObject(j); 
     Toast.makeText(this, json.getString("name").toString(), Toast.LENGTH_LONG).show(); 
    } 
} 

Я рекомендую использовать 'Log' вместо того, чтобы с помощью 'Тост'.

Если возникли путаницы или вопросы, дайте мне знать, я постараюсь изо всех сил разрешить это. Если ответ является выполнимым, отметьте его как правильный ответ.

Счастливое кодирование! Thanks

+0

Это работает, но единственное, что для массива Ingredients отобразит «1 Cup Ice», «1 Bag Beans» для вторых предметов –

+0

Вы пробовали этот код? –

+0

Да, я исправил его сейчас –

1

Вы получаете длину JSONObject, но вы должны получить длину JSONArray внутри этого JSONObject, чтобы перебирать элементы массива json.

int length = jsonObj.getJSONArray("data").size() 
0

Я думаю, вы угадываете это неправильно. Посмотрите внимательно, что у вас есть Json в том, что у вас есть массив, который является JsonArray с именем/данными «data»

, после чего вы можете получить его и пройти по нему по индексу. Для вас я предлагаю вам дорожную карту так, чтобы вещи сделать легко для вас концептуально

  1. Сделать класс модели, который может иметь возможность хранить значения, как вы получаете в ответ на ваш апи или в этом JSon respone.

  2. Возьмите массив типа вашей модели класса для хранения значений

  3. Теперь вы можете добавить цикл для сохранения значений или вы можете разобрать и сохранить массив Джейсона в массив вы сделали, чтобы справиться с jasonarray

это легко понять по this ссылке и this рабочий пример для разбора массив JSON и показать в вашем списке. Вам не о чем беспокоиться после прочтения этих двух ссылок.

0

получить результат с URL, где ваш JSON является и хранения любой переменной (результат здесь), а затем декодировать его я показываю ниже,

попробовать это, он может дать вам подсказку, я не пробовал, но может помочь вам

     JSONObject jsonObject = new JSONObject(result); 
         JSONArray jsonArray = jsonObject.optJSONArray("data"); 

         if (jsonArray != null) { 
          for (int i = 0; i < jsonArray.length(); i++) { 
           JSONObject jsonObjects = jsonArray.optJSONObject(i); 
           int id = jsonObjects.optInt("id"); 
           String varMessage = jsonObjects.optString("varMessage"); 
           String Image = jsonObjects.optString("Image"); 
           String Category = jsonObjects.optString("Category"); 
           String Method = jsonObjects.optString("Method"); 

           JSONArray jsonArrayIngredients = jsonObject.optJSONArray("Ingredients"); 

           for (int i = 0; i < jsonArray.length(); i++) { 
           JSONObject jsonObjects = jsonArray.optJSONObject(i); 

           String name = jsonObjects.optString("name"); 

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