Я довольно новичок в программировании на Android, я предлагаю некоторый код для решения проблемы, которую я, похоже, не могу понять давно.AsyncTask: Не записывать данные в файл
У меня есть AsyncTask, который пытается сохранить некоторые данные в файл, размещенный на внутренней памяти устройства. Файл создается, но заполняется 0 байт
public void exportFile(final Context mContext, boolean debug) {
try {
final String path = Environment.getExternalStorageDirectory()
.getAbsolutePath() + "/DroidP";
File dir = new File(path);
dir.mkdirs();
final File file = new File(dir, "Droid_export.txt");
if (file.exists()) {
file.delete();
}
file.createNewFile();
final FileWriter out = new FileWriter(file,true);
final int totalLines = recordsIdList.size();
new AsyncTask<Void, String, Void>() {
ProgressDialog progressDialog;
@Override
protected Void doInBackground(Void... arg0) {
try {
List<byte[]> mainBuffer = new ArrayList<byte[]>();
int i = 0;
int size = 0;
for (Integer r : recordsIdList) {
Log.i("test", db.getRecord(r).toExportSQL());
byte[] buffer = db.getRecord(r).toExportSQL().getBytes();
mainBuffer.add(buffer);
size += buffer.length;
publishProgress("Writing " + (i++) + " from "+ totalLines);
}
int pos = 0;
char[] outBuffer = new char[size];
for(byte[] chunk : mainBuffer) {
for(i=0;i<chunk.length;i++) {
outBuffer[pos] = (char)chunk[i];
pos++;
}
}
out.write(outBuffer);
out.flush();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
@Override
protected void onProgressUpdate(String... progress) {
progressDialog.setMessage(progress[0]);
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
progressDialog.dismiss();
}
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(mContext,
"Exporting file", "", true);
}
}.execute((Void) null);
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(file.getAbsoluteFile()));
sendBroadcast(intent);
} catch (Exception e) {
}
}
Когда я смотрю на журналы, я могу увидеть данные, которые я пытаюсь сохранить в файл, который является правильным, но после того, как AsyncTask завершит создание файла с 0 байтами. Я что-то упустил? Помните, я довольно новичок в программировании на Android.
Я смущен. Вы хотите прочитать или написать файл? – Blackbelt
Я пытаюсь написать некоторые SQL-запросы, сгенерированные из другого метода в файл. Через LogCat я могу видеть запросы, но они не записываются в файл. –
Нет, вы этого не сделали - это может быть то, что вы хотите, но код, который вы отправили *, читает * из файла. Он не * пишет * к одному. –