Exception, runOnUiThread; BadTokenException

  • Antworten:2
LitteM
  • Forum-Beiträge: 141

22.07.2013, 20:59:55 via Website

Hallo zusammen,

ich habe zwei Activities. Folgendes Problem tritt auf:

Die zweite Activity wird von der ersten aufgerufen. In dieser zweiten Activity hab ich einen TCP socket der Nachrichten von einem Server bekommt. Falls dieser Server nicht erreichbar ist habe ich in der Exception eine runOnUiThread mit folgendem Code implementiert:

1runOnUiThread(new Runnable() {
2 public void run() {
3 AlertDialog.Builder dialog = new AlertDialog.Builder(Localisation.this);
4 dialog.setTitle("Connection timed out");
5 dialog.setMessage("Failed to connect to server. Please check the Wifi connection.");
6 dialog.setNeutralButton("OK", null);
7 dialog.create().show();
8 }
9 });

Soweit funktioniert alles. Nun habe ich eine "zurück" Option zur ersten Activity eingebaut. Bevor diese Activity beendet wird, lasse ich den Thread der die TCP Nachrichten empfängt auslaufen und springe dann zur ersten Activity zurück.

Jetzt macht mir aber der Socket einen Strich durch die Rechnung. Selbst wenn die Verbindung zum Socket "quasi" getrennt wurde, hält Java by default die Verbindung für einen kurzen Zeitraum für Pakete offen, die verspätung hatten.

Da ich aber mittlerweile meine Activity schon geschlossen habe ist der Context für den dialog weg und im falle eines zu spät eintreffendes paketes wird ne fatal exception geschmissen. Dies verursacht mir dann einen super tollen force close :grin:

Hat jemand eine Idee wie ich mir da abhilfe verschaffen kann? Etwas plump gedacht könnte ich die Boolean variable welche mir den Thread beendet abfragen, bevor ich runOnUiThread ausführe. Ich habs allerdings noch nicht ausprobiert - gibts da nicht irgendwie was schöneres oder wäre das die einzige Lösung?

Offen für jegliche Vorschläge :)

Antworten
Ultimate Software
  • Forum-Beiträge: 110

23.07.2013, 01:16:05 via Website

hab nur nach BadTokenException gegoogelt und das hier bekommen: http://tech.shantanugoel.com/2010/07/08/badtokenexception-android-dialog-getapplicationcontext.html

erst dachte ich es wäre ein anderes Problem, jetzt glaube ich aber es ist bei dir Line 3.....

<td class="alt1"> <!-- google_ad_section_start -->Mehrere WLANs?? Versuch doch mal den <a href="http://goo.gl/7ojEp&quot; target="_blank">SSID Selector</a>: <img src="images/smilies/extra/thumbsup.gif" border="0" alt="" title="Thumbsup" class="inlineimg" /><!-- google_ad_section_end --> </td>

Antworten
LitteM
  • Forum-Beiträge: 141

25.07.2013, 17:45:55 via Website

Sorry dass ich mich erst so spät melde. Hatte bisher mein Tablet nicht mehr in der Hand. Werde es erst morgen wieder zum testen haben. Allerdings bezweifle ich, dass dieser "Lösungsvorschlag" etwas an meinem Problem löst.

Habe mich auch vertan bei der Beschreibung. :blink:
Nochmals zusammengefasst: Das Device versucht zum Server zu connecten - Ich schließe die Aktivity - das device versucht immernoch zum server zu connecten bis das timeout abläuft, vorher wird der socket nicht geschlossen - exception weil server nicht erreichbar - der von mir gepostete code wird versucht auszuführen - force close weil application context von der geschlossenen activity natürlich weg ist.

Antworten