2016-12-12 7 views
0

Я сделал веб-страницу, чтобы сделать json по php, теперь я хочу получить данные от json от android, но я хочу поместить массивы с одинаковым идентификатором в список и, наконец, я положил его в HashMap для каждого объекта, чтобы сделать expandableListview, я имею в виду:Как получить данные из тех же массивов из jsonObject в список с android

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [author] => x 
      [book] => y 
     ) 

[1] => Array 
    (
     [id] => 2 
     [author] => w 
     [book] => a 
    ) 

[2] => Array 
    (
     [id] => 1 
     [author] => x 
     [book] => y2 
    ) 

[3] => Array 
    (
     [id] => 1 
     [author] => x 
     [book] => y3 
    ) 

) 

и результат JSON является:

{"authors":[{"id":"1","author":"x","book":"y"},`{"id":"2","author":"w","book":"a"},{"id":"1","author":"x","book":"y2"},{"id":"1","author":"x","book":"y3"}]}` 

и мой код в андроида, чтобы получить данные из JSON:

public static HashMap<String,List<String>> toPerson(String json){ 

    try { 
     JSONObject jsonPerson = new JSONObject(json); 
     JSONArray jsonDataAuthor = jsonPerson.getJSONArray("authors"); 
     HashMap<String ,List<String>> author=new HashMap<String ,List<String>>(); 

     for(int i=0; i<jsonDataAuthor.length(); i++){ 
      List<String> bookOfAuthor=new ArrayList<String>(); 
      JSONObject jsonPn = jsonDataAuthor.getJSONObject(i); 
      String authorName = jsonPn.getString("author"); 
      String bookName = jsonPn.getString("book"); 
      bookOfAuthor.add(bookName); 
      author.put(authorName,bookOfAuthor); 
     } 
     return author; 
    } catch (JSONException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

но я получаю расширяемое представление списка с родителями, и у каждого родителя есть только один ребенок, но здесь с одним и тем же идентификатором я хочу раскрываемое представление списка с двумя родителями, у которого один из них имеет 3 детей, но я не знаю, как, Я хочу ниже результата:

х

  • у

  • y2

  • y3

ж

Я был бы признателен, чтобы помочь мне.

ответ

0

Вы создаете новый список в каждой итерации:

List<String> bookOfAuthor=new ArrayList<String>(); 

Переместить это вне для цикла. Если ваш HashMap содержит ArrayList для данного идентификатора, привезите его и поместите свой bookName в список. В противном случае вы будете продолжать создавать новый ArrayList на каждой итерации, и у вас не будет более 1 предмета.

Что-то в этом роде. Я мог бы иметь синтаксические ошибки, я просто поставить это вместе, чтобы дать вам идею:

try { 
    JSONObject jsonPerson = new JSONObject(json); 
    JSONArray jsonDataAuthor = jsonPerson.getJSONArray("authors"); 
    HashMap<String ,List<String>> author=new HashMap<String ,List<String>>(); 
    List<String> bookOfAuthor; 

    for(int i=0; i<jsonDataAuthor.length(); i++){ 

     JSONObject jsonPn = jsonDataAuthor.getJSONObject(i); 
     String authorName = jsonPn.getString("author"); 
     String bookName = jsonPn.getString("book"); 

     if (author.contains(authorName)){ 
      bookOfAuthor = author.get(authorName); 
     } else { 
      bookOfAuthor = new ArrayList<>();  
     } 

     bookOfAuthor.add(bookName); 
     author.put(authorName,bookOfAuthor); 
    } 
    return author; 
} catch (JSONException e) { 
    e.printStackTrace(); 
    return null; 
} 
+0

, когда я это сделать, опять же у меня там родители, что все из них имеют один и то же ребенок, мне нужно отправить только один Список_массивы для всех одинаковых идентификаторов – hadis

+0

Если вы скопировали и вставили мой код, это не сработало. Как я уже сказал, это было просто дать вам идею. Теперь я обновил свой код, исправил ошибки пары. Возможно, это может быть ошибкой. Идея состоит в том, чтобы использовать тот же ArrayList для данного идентификатора. –