Dialog im Thread starten

J

jim

Ambitioniertes Mitglied
0
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
 
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.
 
  • Danke
Reaktionen: J4M350N
Oder einfach mit einem Handler den "Effekt" auslösen.
 
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:
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
 
@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ß
 
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:
  • Danke
Reaktionen: mr.freeze

Ähnliche Themen

Laser5001
  • Laser5001
Antworten
2
Aufrufe
859
Laser5001
Laser5001
W
  • waltsoft
Antworten
4
Aufrufe
918
waltsoft
W
D
  • djsnoopy
Antworten
6
Aufrufe
587
djsnoopy
D
Zurück
Oben Unten