2016-11-14 6 views
0

Я пытаюсь разобрать Json arraylist (дети) на Java, используя GSON и цикл for. Но я получаю следующее сообщение об ошибке:JSONArray array = new JSONArray (string_of_json_array);

for each not applicable to expression type 
required:array or java.lang.iterable 
found:String 

Вот основной Java класс, который отображает эту ошибку

try { 
    br = new BufferedReader(new FileReader("user.json")); 
    Tree result = gson.fromJson(br, Tree.class); 

    if (result !=null){ 
     for (User t : result.getCategory()){ //ERROR IS HERE (squiggly red line) 
     System.out.println(t.getId() + "-" + t.getName() + "-" + t.getCategory() + "-" + t.getPercentage()); //ERROR IS ALSO HERE FOR EACH VARIABLES 
    } 
    } 


} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} finally { 
    if (br != null){ 

     try { 
      br.close(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 

    } 

Это дерево Класс: Класс

private String category; 
@SerializedName("children") 
@Expose 
private List<Child> children = new ArrayList<Child>(); 

public String getCategory() { 
return category; 
} 

public void setCategory(String category) { 
this.category = category; 
} 

public List<Child> getChildren() { 
return children; 
} 

public void setChildren(List<Child> children) { 
this.children = children; 
} 

Пользователь:

private String id; 
@SerializedName("processed_lang") 
@Expose 
private String processedLang; 
@SerializedName("source") 
@Expose 
private String source; 
@SerializedName("tree") 
@Expose 
private Tree tree; 

public String getId() { 
return id; 
} 

public void setId(String id) { 
this.id = id; 
} 

public String getProcessedLang() { 
return processedLang; 
} 

public void setProcessedLang(String processedLang) { 
this.processedLang = processedLang; 
} 

public String getSource() { 
return source; 
} 

public void setSource(String source) { 
this.source = source; 
} 

public Tree getTree() { 
return tree; 
} 

public void setTree(Tree tree) { 
this.tree = tree; 
} 
    String getName() { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

Может кто-нибудь сообщить мне, где я поступил не так, и если вы, ребята, хотите увидеть json-код, дайте мне знать, я также поместлю его, и причина, по которой я его не размещал, потому что он очень длинный. Так как я могу получить массив показывать список детей? Спасибо за ваше время.

+3

'getCategory' возвращает строку, но вы пытаетесь итерацию над ним в вашем' for' цикла. Что вы пытаетесь сделать здесь? – Zircon

+0

Извините, что забыл упомянуть об этом. Я пытаюсь отобразить детей из Arraylist. –

ответ

0

Для использования цикла For-Each в объекте Java, который должен быть повторен, должен реализовывать интерфейс Iterable<T>.

перебрать children (как вы упомянули в комментарии) просто использовать:

for (Child child : result.getChildren()){    
    System.out.println(child); 
} 

List<T> реализует Iterable интерфейс, так что вы можете использовать для каждого цикла, с ним.

Подробнее: The For-Each Loop, Iterable

+0

Спасибо за ваш ответ, но есть ли способ сделать Arraylist из класса Tree для отображения? так как это, вероятно, покажет все массивы. Ребенок показывает только одного арраиста. –

+1

@ArdiAbdul извините, я не могу понять. Что бы вы хотели? –

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