K
Kollen
Gast
Hallo,
ich habe ein Problem mit SQL, AsyncTask und ProgressDialog.
Ich will während des schreibens von Informationen in der Datenbank (die in einem AsyncTask geschieht) einen ProgressDialog anzeigen lassen.
Nachdem ich das Programm gestartet habe, ist das einzige was ich zu sehen bekomme, nachdem der Screen während des schreibens friert (es geschieht also garnichts), diesen ProgressDialog für einen kurzen Augenblick.
Was ich aber will ist, dass der ProgressDialog die ganze Zeit über laufen soll bis die Schreiberei beendet worden ist.
Hier ein paar snippet meiner Klasse die von AsyncTask erbt
Ich hatte keine Probleme beim Schreiben von 4 Spalten (was logisch ist denn das Programm braucht nicht viel um diese zu schreiben, trotzdem war der ProgressDialog nur für einen kurzen Augenblick zu sehen).
Als ich versucht habe 1000 zu speichern ist es mir aufgefallen. Was ich
aber nicht verstehe ist, wieso der UI Thread aufgehalten wird...
Es kann ja nicht sein dass der AsyncTask zu viel arbeitet oder?
Gibt es vllt eine elegantere Lösung wie ich das erreichen kann?
Vielen Dank schonmal.
ich habe ein Problem mit SQL, AsyncTask und ProgressDialog.
Ich will während des schreibens von Informationen in der Datenbank (die in einem AsyncTask geschieht) einen ProgressDialog anzeigen lassen.
Nachdem ich das Programm gestartet habe, ist das einzige was ich zu sehen bekomme, nachdem der Screen während des schreibens friert (es geschieht also garnichts), diesen ProgressDialog für einen kurzen Augenblick.
Was ich aber will ist, dass der ProgressDialog die ganze Zeit über laufen soll bis die Schreiberei beendet worden ist.
Hier ein paar snippet meiner Klasse die von AsyncTask erbt
Code:
public class ESQLiteWriteAsyncTask extends AsyncTask<Object, Void, Boolean>
{
[...]
[COLOR=Red][B]private ProgressDialog progressDialog = null;[/B][/COLOR]
[...]
public ESQLiteWriteAsyncTask(final Context context, final ESQLiteDatabase esqLiteDatabase, final String tableName)
{
[...]
}
[B][COLOR=Red]@Override
protected void onPreExecute()
{
super.onPreExecute();
progressDialog = ProgressDialog.show(context, WAIT, CRUD, true);
progressDialog.setCancelable(false);
}[/COLOR][/B]
@Override
protected Boolean doInBackground(Object... objects)
{
[B]//Hier startet das Schreiben[/B]
SQLiteDatabase sqLiteDatabase = null;
try
{
sqLiteDatabase = esqLiteDatabase.getWritableDatabase();
for (Object object : objects)
{
final ContentValues contentValues = new ContentValues();
[...]
}
sqLiteDatabase.insert(tableName, null, contentValues);
[...]
ELog.info(stringBuilder.toString());
}
}
catch (Exception e)
{
[...]
return false;
}
finally
{
if (sqLiteDatabase != null)
{
if (sqLiteDatabase.isOpen())
{
sqLiteDatabase.close();
[...]
ELog.info(stringBuilder.toString());
}
}
}
return true;
}
[B][COLOR=Red]@Override
protected void onPostExecute(Boolean result)
{
super.onPostExecute(result);
progressDialog.dismiss();
}[/COLOR][/B]
}
Als ich versucht habe 1000 zu speichern ist es mir aufgefallen. Was ich
aber nicht verstehe ist, wieso der UI Thread aufgehalten wird...
Es kann ja nicht sein dass der AsyncTask zu viel arbeitet oder?
Gibt es vllt eine elegantere Lösung wie ich das erreichen kann?
Vielen Dank schonmal.