Мне очень нужна помощь в решении этой проблемы. Вот часть кода. Я должен разбирать все файлы перед написанием вывода в текстовом файле. Проблема заключается в том, что она написала либо только разобранный 1-й xml, либо 2-й файл xml.Java Arraylist получает повторную инициализацию после каждой итерации цикла for
Метод написания:
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;
}
журнал показывает это:
Test /storage/sdcard/Garmin/01.xml
Test /storage/sdcard/Garmin/02.xml
Test message
Test message
Но печать показывает только выход из /хранения/SDCard/Garmin /01.xmlдважды
'files.length' возвращает ?? –
Что такое 'f'? Вы не используете 'i' в своем цикле for, так что он просто выполняет один и тот же код дважды –
Вероятно, вам нужны' файлы [i] 'вместо' f' – kaykay