Toast und Threads :-(

  • Antworten:4
  • Bentwortet
Schinkelmedia
  • Forum-Beiträge: 6

01.08.2011, 20:21:48 via Website

Hallo,
ich scheine einen Denkfehler zu haben.
In meiner Singleton-Klasse speichere ich den Context von meiner Hauptactivity.
Diese Hauptactivity hat einen Button, der blendet so eine "Bitte warten"-Meldung ein, öffnet einen Thread, der etwas berechnet. Wenn dieser Fertig ist, schließt er die "Bitte warten"-Meldung wieder.
Das Problem ist nun, dass ich versuche Toast-Messages aus dem Thread zu senden(Falls Fehler auftreten oder alles gut gelaufen ist)
Dazu gebe ich der Toastmessage den Context aus der Singleton-Klasse. Ich glaube, dass ich bei der Sache einen grundlegenden Denkfehler habe.

-oncreate der Hauptklasse:
Singleton.getInstance().ctx = this.getApplicationContext();

- irgend wo in der Threadklasse:
Toast.makeText(Singleton.getInstance().ctx, "Erfolgreich geupdated", Toast.LENGTH_LONG).show();

(Der SQLite-Aufruf im Thread funktioniert übrigens mit diesem Context)

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

01.08.2011, 20:29:09 via Website

ja und wo ist nun das problem?

swordiApps Blog - Website

Antworten
Schinkelmedia
  • Forum-Beiträge: 6

02.08.2011, 06:29:39 via Website

Oh, das Wichtigste vergessen:
Das Problem ist, dass die Toast-Messages nicht eingeblendet werden.

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

02.08.2011, 08:48:50 via Website

Übergibt mal als Context die Activity selbst.
Das ist der "GUI-Host" der App.

Ansonsten ist diese Zeile hier hoffentlich nur Pseudo-Code und nicht ernst gemeint :)

1Singleton.getInstance().ctx = this.getApplicationContext();

Wenn doch -> http://de.wikipedia.org/wiki/Datenkapselung_%28Programmierung%29

Antworten
Schinkelmedia
  • Forum-Beiträge: 6

02.08.2011, 14:27:51 via Website

Alsoo nach sehr langem rumprobieren bin ich auf eine Lösung gekommen:

in der Activity gibt es jetzt einen Handler:
1private Handler toastHandler = new Handler() {
2 @Override
3 public void handleMessage(android.os.Message msg) {
4 Toast.makeText(Singleton.getInstance().getCtx(), msg.getData().getString("msg"), Toast.LENGTH_SHORT).show();
5 }
6};

Dem muss man Nachrichten schicken z.B. mit:

1android.os.Message msg = new Message();
2Bundle bbb = new Bundle();
3bbb.putString("msg", "Mein zu sendender Text");
4msg.setData(bbb);
5toastHandler.sendMessage(msg);

Weiß nicht, ob es die beste Lösung ist, aber funktioniert erstmal.

Danke für deine Hilfe. Muss zugeben, dass es schon wirklich so im Quellcode stand weil ich noch in der ausprobierphase bin. Aber jetzt wo es geht, hat Eclipse das schnell für mich geändert.:)

Antworten