Java 创建对象的ArrayList会使每个元素都相同
我不熟悉Java和Android。我正在编写的应用程序的一部分从文件中读取项目数据,并在使用它填充ListView之前填充项目的ArrayList 从main.java:-Java 创建对象的ArrayList会使每个元素都相同,java,android,arraylist,Java,Android,Arraylist,我不熟悉Java和Android。我正在编写的应用程序的一部分从文件中读取项目数据,并在使用它填充ListView之前填充项目的ArrayList 从main.java:- public class MainActivity extends AppCompatActivity { public static ArrayList<Item> items; . . . private void ReadItemsFile() throws IOEx
public class MainActivity extends AppCompatActivity {
public static ArrayList<Item> items;
.
.
.
private void ReadItemsFile() throws IOException {
File itemsFile = new File(itemsFilenameString);
items = new ArrayList<Item>();
try (BufferedReader itemsBufferedReader = new BufferedReader(new FileReader(itemsFile))) {
for (String line; (line = itemsBufferedReader.readLine()) != null; ) {
String[] lineStrings = line.split("\t|\n", 2);
int itemNo = Integer.parseInt(lineStrings[0]);
items.add(new Item(itemNo, lineStrings[1]));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
但是当我运行这个程序时,我发现ArrayList(和ListView)中充满了与上次从文件中读取的项目相同的项目。我已尝试对此进行调试,发现ArrayList中的所有项都已更改为在该行之后添加的最后一项:-
items.add(new Item(itemNo, lineStrings[1]));
请有人解释一下为什么会这样,以及如何修复它
我以前在这个网站上检查过,发现我的ArrayList填充方法与建议的方法相同。我以前遇到过这个问题。当时我无法找到解决方案,所以我最终采用了另一种方法,即使用SQLite数据库将有关我的项目的信息存储在本地存储中。我不确定这对您是否有帮助,但它是将数据存储在常规文件中的一种可行的替代方法。对
项
类中的字段使用静态
,会使它们属于该类,而不是该类的实例。
每次创建新项时,都会将类字段重置为新值。您的
项
对象没有任何特定于实例的数据删除。在您的项类中,可以看到类型为静态的变量,这可能是一个原因。尝试删除static关键字,因为在此场景中,这些变量/属性值依赖于对象,而不是所有对象的公共值
public class Item {
private int idInt;
private String description;
private Image image;
public Item(int idInt, String description,Image image) {
this.idInt = idInt;
this.description = description;
this.image = image;
}
希望这能解决您的问题。这与他们的存储无关。他们的
项
类中显然有静态
变量,而不是实例变量。谢谢。我确实考虑过这条路线,但现在我意识到这是多余的。非常感谢。这解决了问题。非常感谢。这就解决了问题。
public class Item {
private int idInt;
private String description;
private Image image;
public Item(int idInt, String description,Image image) {
this.idInt = idInt;
this.description = description;
this.image = image;
}