2016-02-06 37 views
-1

我有一個叫做GradeModel2的類,它有2個成員:grade(字符串)和sections(字符串列表)。我試圖從我從服務器讀取的json字符串獲取我的GradeModel2的數據。奇怪的結果!是因爲json嗎?或者是什麼?

List<GradeModel2> gradeList = new ArrayList<>(); 
List<String> sectionsList = new ArrayList<>(); 
JSONObject jo = new JSONObject(json); 
JSONArray grades = jo.getJSONArray("grades"); 
for (int i=0;i<grades.length();i++){ 
    sectionsList.clear(); 
    JSONObject grade = grades.getJSONObject(i); 
    JSONArray sections = grade.getJSONArray("sections"); 
    Log.e("length",sections.length()+""); 
    for (int k=0;k<sections.length();k++) 
     sectionsList.add(sections.getString(k)); 
    gradeList.add(new GradeModel2(grade.getString("grade"), sectionsList)); 
} 
/**************/ 
for (GradeModel2 grade : gradeList) { 
    List<String> ss = grade.getSections(); 
    for (String s : ss) 
     Log.e("section",grade.getGrade()+" : "+s); 
} 
/**************/ 

所檢索的JSON字符串看起來如下:

{"id":"596","privileges":"T","grades":[{"grade":"1","sections":["A","B","C"]},{"grade":"3","sections":["A","B"]},{"grade":"7","sections":["A"]},{"grade":"9","sections":["B"]},{"grade":"10","sections":["A"]}]} 

的問題是,所有GradeModel2對象的章節列表是長度和值的!!! 第一Log.e,前內for循環一行,示出了列表的第一個項的長度爲(,和Ç(見JSON) )。但是,我試圖在第二個塊的內部for循環中打印每個GradeModel2對象的所有部分,但是我在所有等級中都看到了部分A! (參見圖)

the result of the two Log.e

這是怎麼回事?這是爲什麼發生?

回答

1

你的問題是在sectionsList。您正試圖重複使用同一個對象,因此此行代碼new GradeModel2(..., sectionsList);只會將相同的sectionsList添加爲引用。並且因爲sectionsList.clear();,您會看到最後一個json部分的「A」({"grade":"10","sections":["A"]})要解決此問題,您必須在for循環中每次創建一個新數組。這樣的事情:

for (int i = 0 ; i < grades.length() ; i++){ 
    List<String> sectionsList = new ArrayList<>(); 
    // ... your json code here 
    gradeList.add(new GradeModel2(grade.getString("grade"), sectionsList)); 
} 
+0

它的工作..謝謝:)但爲什麼** clear()**沒有做它應該怎麼做? –