ProgressDialog funktioniert nicht richtig

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

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]
}
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.
 
Hey, hab den Übeltäter.

Hab die Methode .get() aufgerufen die den UI Thread blockiert hat bis das ganze Geschreibe fertig waren um an den result Wert heranzukommen.

Hier für die jenigen die das selbe Problem haben, StackOverflow
 

Ähnliche Themen

SaniMatthias
Antworten
19
Aufrufe
1.004
swa00
swa00
S
Antworten
7
Aufrufe
1.199
swa00
swa00
O
Antworten
15
Aufrufe
3.021
ORHUX
O
Zurück
Oben Unten