Java Arraylist在for循环的每次迭代后都会重新初始化

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

我真的需要帮助解决这个问题。这是代码的一部分。我应该在将输出写入文本文件之前解析所有文件。问题是,它只编写解析的第一个xml或第二个xml文件

写作方法:

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;