ProgressDialog funktioniert nicht in externer AsyncTask

9

Ich fange an zu denken, dass die AsyncTask eine innere Klasse innerhalb einer Aktivitätsklasse sein muss, damit ein ProgressDialog funktioniert. Wahr? [Bearbeitet viel später ... die Antwort ist falsch und ich bin mir nicht sicher, ob das ein Bug ist oder was. Ich benutze Android 1.5. Ich werde über Services nachlesen.]

Ich habe eine Aktivität, die eine Datenbank verwendet, um Informationen zu manipulieren. Wenn die Datenbank gefüllt ist, ist alles in Ordnung. Wenn es nicht ausgefüllt ist, muss ich Informationen von einer Website herunterladen, die Datenbank auffüllen und dann auf die gefüllte Datenbank zugreifen, um die Ansichten in onCreate abzuschließen.

Das Problem ist ohne irgendwelche Mittel zu bestimmen, wenn der AsyncTask-Thread das Füllen der Datenbank beendet hat, bekomme ich die folgende Force Close-Fehlermeldung: Sorry! Die Anwendung wurde unerwartet beendet. Ich klicke auf die Schaltfläche "Schließen", der Hintergrund-AsyncTask-Thread funktioniert weiter, die Datenbank wird aufgefüllt und alles funktioniert einwandfrei.

Ich muss diese Fehlermeldung loswerden und brauche Hilfe, um dies zu tun. Hier ist ein Pseudo-Code:

%Vor%

In einer separaten Datei:

%Vor%

Hier ist der Stack-Trace vom Emulator:

%Vor%

Was mache ich falsch?

Herr. Schneeflocke,

Versucht:

%Vor%

Activity.this wird als Fehler gekennzeichnet: Im Bereich

ist keine umschließende Instanz des Typs Aktivität verfügbar

Ich denke, ich muss FillDB erweitert Aktivität erstellen dann eine private Klasse innerhalb FillDB erweitern AsyncTask? Das wird nicht funktionieren. Keine Zusicherung, wenn die FillDB-Aktivität gestartet wird und startActivityForResult nicht verwendet werden kann, da nach Abschluss der Operation kein Ergebnis von AsyncTask zurückgegeben wird.

Update: Es wurde versucht, eine private Klasse in der aufrufenden Klasse zu erstellen. Kann immer noch keinen ProgressDialog anzeigen. Einer der Fehler ist: Kann Fenster nicht hinzufügen - Token-Null ist nicht für eine Anwendung. Ich habe keine Ahnung, auf welches Token man sich bezieht.

    
eric 21.03.2010, 16:01
quelle

4 Antworten

2

Ich habe AsyncTask aufgegeben und einen Handler verwendet, um den Thread zu behandeln. Alles ist gut.

Nicht sicher, ob es ein Fehler in 1.5 mit AsyncTask oder etwas anderes ist, was ich nicht gemacht habe.

    
eric 28.03.2010, 23:37
quelle
2

Haben Sie überlegt, die Methode onCreateDialog () zu überschreiben, um Ihre Dialoge zu implementieren? Es ist einfach, sie auf diese Weise zu erstellen und zu steuern, da Android die meiste Arbeit für Sie erledigt. Ich habe unten ein Beispiel, das genau das tut, was Sie tun wollen.

Ссылка

    
Jason Knight 22.03.2010 05:28
quelle
0

Ich hatte das gleiche Problem wie OP für ziemlich lange mit einer öffentlichen (externen) AsyncTask. Bei der Untersuchung der Fehlermeldung "Versuch, ein Fenster mit einem Token ohne Anwendung hinzuzufügen" habe ich festgestellt, dass das Problem darin besteht, den Kontext festzulegen, der im Konstruktor der AsyncTask übergeben wird. Der Kontext, der übergeben werden soll, ist "this", nicht this.getApplicationContext () oder this.getBaseContext (). Das hat mein Problem gelöst.

    
Samik R 20.07.2010 20:57
quelle
0

Versuchen Sie,

auszuführen %Vor%

als ausführbares Argument für Activity.runOnUiThread (). Benutzeroberflächenelemente sollten im UI-Thread erstellt und bearbeitet werden. Ich denke, das gilt auch für Dialog s.

[Bearbeiten] Code:

%Vor%     
MrSnowflake 21.03.2010 18:05
quelle

Tags und Links