2016-03-15 70 views
0

我只是不明白這裏發生了什麼。Android:ArrayList存儲奇怪值

ArrayList<ListItem> list=new ArrayList<ListItem>(); 
ListItem curItem=new ListItem(); 
String[] contents=cwFile.list(); 
for(int i=0;i<contents.length;i++){ 
    curItem.itemName = contents[i]; 
    if(new File(cwd+contents[i]).isDirectory()){ 
     curItem.isDir=true; 
    } 
    list.add(i,curItem); 
} 
Log.i("Main",list.get(0).itemName); 
Log.i("Main",contents[0]); 

所以在這個代碼片斷中,我得到使用的File.List()方法

然後一個目錄的內容,我的名字保存在ListItemArrayList的對象,其中ListItem是自創建的類。

但是,ListItem僅僅是存儲字符串

class ListItem { 
    protected String itemName =""; 
    protected boolean isDir=false; 
    protected Double size=0.0; 
} 

然而,記錄兩者的陣列的第一元件和ArrayList(最後兩行的第一個代碼段的)後一類,我得到不同結果!

這是日誌輸出:

03-15 20:29:46.427 465-465/com.harshal.filer I/filer: .userReturn 
03-15 20:29:46.427 465-465/com.harshal.filer I/filer: Android 

第二輸出,「機器人」是在裝置上的實際目錄。 但是什麼是「.userReturn」,它來自哪裏?

+3

提示:你只會創建一個ListItem實例。然後,您添加了許多對同一對象的引用。這是一個錯誤...至於'.userReturn',這是文件或目錄,但以'.'開頭的文件默認是隱藏的...... –

回答

2

你的代碼更改爲以下:

ArrayList<ListItem> list=new ArrayList<ListItem>(); 
String[] contents=cwFile.list(); 
for(int i=0;i<contents.length;i++){ 
    ListItem curItem=new ListItem(); 
    curItem.itemName = contents[i]; 
    if(new File(cwd+contents[i]).isDirectory()){ 
     curItem.isDir=true; 
    } 
    list.add(i,curItem); 
} 
Log.i("Main",list.get(0).itemName); 
Log.i("Main",contents[0]); 

你看我搬到

ListItem curItem=new ListItem(); 

進入for循環。如果它在列表中位置0處的項目的引用之外,則將始終指向數組中的最新條目,因此是奇怪的結果。

+0

解決了我的問題!謝謝! – Guest1997