java - Android:ArrayList存储奇怪的值

标签 java 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]);

因此,在此代码 fragment 中,我使用 File.list() 方法获取目录的内容

然后,我将名称存储在 ListItem 对象的 ArrayList 中,其中 ListItem 是一个自行创建的类。

但是,ListItem 只是一个存储字符串的类

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

但是,在记录数组和 ArrayList 的第一个元素(第一个代码 fragment 的最后 2 行)之后,我得到了不同的结果!

这是日志输出:

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

第二个输出,“Android”是设备上的实际目录。 但是“.userReturn”是什么以及它来自哪里???

最佳答案

将代码更改为以下内容:

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 的项目的引用之外,则将始终指向数组中的最新条目,因此会出现奇怪的结果。

关于java - Android:ArrayList存储奇怪的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36015261/

相关文章:

java - 使用 javafx SimpleMapProperty 时出现 UnsupportedOperationException

java - 尝试更改卡的值(value)

android - Package Explorer 的 Android Studio 键盘快捷键是什么?

android - 加载完成后不调用 LoaderCallbacks.onLoadFinished()

java - 处理程序未在 Instrumentation 测试中执行 Runnable

java - 如何根据变量值对 ArrayList 进行排序

Java 添加到列表 NullPointerException

java - 如何在java中的坐标数组中找到左上角坐标

java - 为什么android无法识别loadurl方法?

java - 在 REST api 中一次发布复杂对象还是逐步添加子资源?