我在为自己写一个小程序时遇到了一些问题。我有一个课程,它将从CSV中读取并将数据放入Fart类的arraylist中(这是您在问之前的战斗艺术的简称)。这工作,当我测试我的输出时,我可以看到从csv读入的值。
AssetManager assetManager =context.getAssets();
ArrayList<Farts> arrayfarts = new ArrayList<Farts>();
InputStream csvStream = null;
System.out.println("right before try loop");
try {
csvStream = assetManager.open("farts.txt");
InputStreamReader csvStreamReader = new InputStreamReader(csvStream);
CSVReader csvreader = new CSVReader(csvStreamReader);
Farts fdata = new Farts();
String[] line;
int temp=0;
while ((line=csvreader.readNext())!=null){
System.out.println("inside of while");
fdata.fname=line[0];
fdata.description=line[1];
arrayfarts.add(temp,fdata);
System.out.println("Array iteration " + temp + " of " + arrayfarts.size());
System.out.println(arrayfarts.get(temp).fname + " " + arrayfarts.get(temp).description + "\n");
temp++;
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("ioexception"+e.toString());
}
return arrayfarts;
}
回到我的Main类中,然后使用.addall添加从上面返回的内容。但是,Arraylist中的数据仅填入输入的最后一个值。
arrayFarts.addAll(readcsv.retrieveFarts(this));
System.out.println(arrayFarts.get(0).fname + " " + arrayFarts.get(0).description + "\n");
int temp=0;
while (temp<arrayFarts.size()){
cupboard().withDatabase(db).put(arrayFarts.get(temp));
System.out.println("Array iteration " + temp + " of " + arrayFarts.size());
System.out.println(arrayFarts.get(temp).fname+" "+arrayFarts.get(temp).description+"\n");
temp++;
}
我错过了什么吗?
答案 0 :(得分:1)
问题在于以下几点:
fdata.fname=line[0]; fdata.description=line[1]; arrayfarts.add(temp,fdata);
您需要在每个循环中创建一个新的Farts实例,而不是更改单个实例。
就目前而言,您只需将相同的实例多次添加到列表中,同时更改其值。这意味着在循环完成后您将只看到最后解析的值。您也会多次看到它,因为ArrayList
允许重复。