2016-04-26 68 views
0

我正在使用android studio並嘗試用數據填充ListView,該數據存儲在設備內部存儲的文件中。我可以創建一個列表,其中包含文件的確切數量,但它們應該都顯示不同的信息。目前,它們都顯示與ArrayList中的第一項相同的數據。使用ArrayList中的數據填充Android ListView將每個項目設置爲與第一個項目相同

下面是代碼:

ContextWrapper contextWrapper = new ContextWrapper(getApplicationContext()); 
     File directory = contextWrapper.getDir(filepath, Context.MODE_PRIVATE); 

     int counter = 0; 

     int fileNameNumber = 1; 

     filename = "newAssessment(" + fileNameNumber + ").json"; 

     internalFile = new File(directory, filename); 

     JSONObject jsonObject; 

     while (internalFile.exists()) { 

      files.add(counter, internalFile); 

      try { 
       FileInputStream fis = new FileInputStream(internalFile); 
       DataInputStream in = new DataInputStream(fis); 
       BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

       String strLine; 

       while ((strLine = br.readLine()) != null) { 
        myData = myData + strLine; 
       } 
      }catch(IOException e){ 
       e.printStackTrace(); 
      } 

       try { 
        jsonObject = new JSONObject(myData); 

        String assessmentDate = jsonObject.getString("assessmentDate"); 
        String orchard = jsonObject.getString("orchard"); 

        data.add(counter, assessmentDate + " : " + orchard); 
       }catch(JSONException e){ 
        e.printStackTrace(); 
       } 

       counter++; 
       fileNameNumber++; 


      filename = "newAssessment(" + fileNameNumber + ").json"; 

      internalFile = new File(directory, filename); 
     } 

     LVAssessments.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data)); 

我可以證實,不同的數據被存儲。更改第一個項目是數組更改所有項目。

感謝您的幫助。

+1

你在哪裏初始化了**數據**? – KishuDroid

+0

這是一個類變量'私人列表 data = new ArrayList <>();' – mgrantnz

+0

在你的方法中聲明 – KishuDroid

回答

1

你不是在外部while循環初始化myData的。所以在外部while循環中初始化你的myData。

while (internalFile.exists()) { 

      files.add(counter, internalFile); 

      try { 
       FileInputStream fis = new FileInputStream(internalFile); 
       DataInputStream in = new DataInputStream(fis); 
       BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

       String strLine; 

       while ((strLine = br.readLine()) != null) { 
        myData = myData + strLine; 
       } 
      }catch(IOException e){ 
       e.printStackTrace(); 
      } 

       try { 
        jsonObject = new JSONObject(myData); 

        String assessmentDate = jsonObject.getString("assessmentDate"); 
        String orchard = jsonObject.getString("orchard"); 

        data.add(counter, assessmentDate + " : " + orchard); 
       }catch(JSONException e){ 
        e.printStackTrace(); 
       } 

       counter++; 
       fileNameNumber++; 
       myData = ""; 


      filename = "newAssessment(" + fileNameNumber + ").json"; 

      internalFile = new File(directory, filename); 
     } 

     LVAssessments.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data)); 
+0

做了伎倆,謝謝堆。 – mgrantnz

0

您需要使用for循環,從JSON對象獲得的所有數據,並將其添加到myData的

+0

你可以給我一個例子?我發現很難想象你的意思,謝謝。 – mgrantnz

1

的問題是在這裏:

while ((strLine = br.readLine()) != null) { 
       myData = myData + strLine; 
      } 

的myData仍具有較舊的數據時,while循環再次重複。在上面的while循環重複之前,您需要將myData初始化爲新的字符串。

myData = ""; 
while ((strLine = br.readLine()) != null) { 
       myData = myData + strLine; 
      } 
相關問題