Dialog im Thread starten

  • 8 Antworten
  • Neuester Beitrag
Diskutiere Dialog im Thread starten im Android App Entwicklung im Bereich Betriebssysteme & Apps.
J

jim

Ambitioniertes Mitglied
Hallo liebes Froum,

ich habe gerade das Problem das ich in einem Thread bestimmte Aufgabe löse und für den User ein Dialog mit Ladebalken angezeit wird. Dies scheint aber nicht die richtige vorgehensweise zu sein und zu dem bekomme ich ab und zu einen Fehler.


Activity has leaked window that was originally added here....

PHP:
 dialog = new ProgressDialog(Vibrations.this);
		     dialog.setCancelable(false);
		     dialog.setMessage("Save values to file...");
		     dialog.show();
		     
	    	 new Thread() {
	    		
		       public void run() {}}
dialog.dismiss();.start()
Ich habe auch schon diverses Lsg. gefunden. Leider verstehe ich sie nicht ganz. Wie wäre der richtige Weg den Progressbalken anzuzeigen?

Vielen Dank jim
 
S

swordi

Lexikon
benutze die klasse asynctask. die bietet dir alles was du brauchst.

du kannst kein ui element aus einem thread, der nicht der main thread ist, verändern.
 
rushzero

rushzero

Fortgeschrittenes Mitglied
Oder einfach mit einem Handler den "Effekt" auslösen.
 
J

jim

Ambitioniertes Mitglied
Hmm, habs jetzt hinbekommen, aber irgendwie ist es mir nicht mögl. das in einer extra .java Datei als extra Klasse zu halten, da er dann " new ProgressDialog(Vibrations.this);" nicht mehr kennt. Ist diese variante nicht möglich??

public class SaveData extends AsyncTask<Void, Void, Void> {

ProgressDialog dialog =new ProgressDialog(Vibrations.this);
@Override
protected Void doInBackground(Void... arg0) {
// prepare the dialog box

///doing stuff here
}

@Override
protected void onPreExecute() {
dialog.setCancelable(false);
dialog.setMessage("loading");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.show();

}
@Override
protected void onPostExecute(Void result) {
dialog.dismiss();
super.onPostExecute(result);
}
}
 
Zuletzt bearbeitet:
J

jim

Ambitioniertes Mitglied
Hey, also ich bin immer dankbar für Antworten. aber manchmal ......

Meine Frage scheint ja zu implizieren das ich nicht das ausreichende Verständnis habe das Problem zu erfassen(bzw. dessen Lsg.) und leider hilft mir der Link da auch nicht weiter.. .
Nicht jeder kann ohne etwas Erläuterung alles erfassen aber für sowas ist ein Forum ja da. man muss ja nicht antworten wenn man denkt die anderen sind alle zu "blöd.." .

Tut mir leid das ich mich hier kurz ärgere, hatte nur gerade ein paar MathePrüfungen und war in anderen Forum(Mathe) unterwegs wo ich mich sehr geärgert habe über manche Klugscheißer.

Es ist halt einfach so, dass manche Menschen einfache Dinge nicht verstehen(so wie ich gerade) und da hilft dann auch kein kurzer Kommentar.

Sei mir nicht böse, aber wenn nur ein Mensch in dieser hinsicht sensibilisiert wird reicht mir das schon aus.

bitte nimms nicht persöhnlich LG Jim
 
M

mr.freeze

Ambitioniertes Mitglied
@swordi
du kannst kein ui element aus einem thread, der nicht der main thread ist, verändern.
du hattest in dem anderen AsyncTask-Thread geschrieben
lege eine progressbar in dein layout und mach sie visible=gone

in onPreExecute kannst sie visible setzen
dann im onPostExecute wieder auf gone
das onPreExecute is doch ein anderer Thread!?

Gruß
 
Z

Zoopa

Stammgast
das onPreExecute is doch ein anderer Thread!?
Gruß
onPreExecute(), onPostExecute() und onProgressUpdate() werden automatisch im UI-Thread ausgeführt, daher darf man in diesen Methoden GUI-Elemente bearbeiten. Nur doInBackground() wird in einem neuen Thread ausgeführt.

Zusätzlich gibt es noch die Methode publishProgress(), die man in doInBackground() aufrufen darf. Dadurch wird dann onProgressUpdate() ausgeführt (im UI-Thread). So kann man z.b. einen Ladebalken machen, der sich ändert, während doInBackground() noch am arbeiten ist.
 
Zuletzt bearbeitet:
Ähnliche Themen - Dialog im Thread starten Antworten Datum
2
5