Java Arraylist在for循环的每次迭代后都会重新初始化
我真的需要帮助解决这个问题。这是代码的一部分。我应该在将输出写入文本文件之前解析所有文件。问题是,它只编写解析的第一个xml或第二个xml文件 写作方法:Java Arraylist在for循环的每次迭代后都会重新初始化,java,android,parsing,arraylist,Java,Android,Parsing,Arraylist,我真的需要帮助解决这个问题。这是代码的一部分。我应该在将输出写入文本文件之前解析所有文件。问题是,它只编写解析的第一个xml或第二个xml文件 写作方法: new LoadCoordinatesTask().execute(); Button btncoor = (Button) findViewById(R.id.File); btncoor.setOnClickListener(new OnClickListener() { @Override
new LoadCoordinatesTask().execute();
Button btncoor = (Button) findViewById(R.id.File);
btncoor.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (isSDCardWritable()) {
StringBuilder locationStrBuilder = new StringBuilder();
locationStrBuilder.append(coordinates + "\n");
String locationStr = locationStrBuilder.toString();
try {
File sdCard = Environment.getExternalStorageDirectory();
File directory = new File(sdCard.getAbsolutePath()+"/FileReader");
directory.mkdirs();
File myFile = new File(directory, fileCoord);
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile, true);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
myOutWriter.append(locationStr);
myOutWriter.close();
fOut.close();
Toast.makeText(getBaseContext(),"Successfully downloaded coordinates.",Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
Toast.makeText(getBaseContext(), e.getMessage(),Toast.LENGTH_SHORT).show();
} }
else
{
// SD Card Not Available
Toast.makeText(getBaseContext(),"SD Card Not Available",Toast.LENGTH_SHORT).show();
} //else
}// onClick
});
}
FilenameFilter方法:
public FilenameFilter xmlFilter = new FilenameFilter() {
@override
public boolean accept (File dir,String name) {
return name.endsWith(".xml") || name.endsWith (".XML")
}
};
private class LoadCoordinatesTask extends AsyncTask<String, Void, List<Coordinates>> {
for (String filename : dir.list(xmlFilter)) {
String path = dir.getAbsolutePath() + "/" + filename;
Log.i (TAG, path);
coordinates.addAll(parser.parse(path));
Log.i (TAG, "message");
}
return coordinates;
}
但是打印时只会在下面的代码中显示两次/storage/sdcard/Garmin/01.xml的输出,您正在重新指定一个新的列表对象以指向该对象,这就是它将被重新初始化的原因
public List<Coordinates> coordinates = new ArrayList<Coordinates>();
for (int i = 1; i <= files.length; i++) {
coordinates = parser.parse (f);
}
return coordinates;
public List coordinates=new ArrayList();
对于(int i=1;i我认为您希望这样做:
public FilenameFilter xmlFilter = new FilenameFilter() {
@override
public boolean accept (File dir,String name) {
return name.endsWith(".xml") || name.endsWith (".XML")
}
};
String files[] = dir.list(xmlFilter);
File f;
public List<Coordinates> coordinates = new ArrayList<Coordinates>();
for (String file_name:files) {
f=dir.getAbsolutePath() + "/" + filename;
coordinates.addAll(parser.parse (f));
}
return coordinates;
public FilenameFilter xmlFilter=new FilenameFilter(){
@凌驾
公共布尔接受(文件目录,字符串名称){
返回name.endsWith(“.xml”)| | name.endsWith(“.xml”)
}
};
字符串文件[]=dir.list(xmlFilter);
文件f;
公共列表坐标=新的ArrayList();
用于(字符串文件\u名称:文件){
f=dir.getAbsolutePath()+“/”+文件名;
coordinates.addAll(parser.parse(f));
}
返回坐标;
否?文件。length
返回??什么是f
?您没有在for循环中使用i
,因此它只是执行两次相同的代码,您可能需要文件[i]
而不是f
Sir@Rod_Algonquin,files.length返回存储中有多少文件。它来自FilenameFilter方法Sir@AlexBaker,f来自FilenameFilter方法,它是我正在解析的文件名的文件路径。我尝试了应该尝试的代码,并打印了最后一次读取(已解析)文件两次。就像我尝试过的第二个代码一样。已经编辑了添加FilenameFilter方法的代码谢谢,先生,使用该代码,它只打印第二个xml文件两次。Y
public List<Coordinates> coordinates = new ArrayList<Coordinates>();
for (int i = 0; i <files.length; i++) {
coordinates.addAll(parser.parse (f));
}
return coordinates;
public FilenameFilter xmlFilter = new FilenameFilter() {
@override
public boolean accept (File dir,String name) {
return name.endsWith(".xml") || name.endsWith (".XML")
}
};
String files[] = dir.list(xmlFilter);
File f;
public List<Coordinates> coordinates = new ArrayList<Coordinates>();
for (String file_name:files) {
f=dir.getAbsolutePath() + "/" + filename;
coordinates.addAll(parser.parse (f));
}
return coordinates;