Socket-Verbindung klappt nicht

T

ThomasL

Neues Mitglied
1
Hallo zusammen,

ich habe jetzt meine erste App programmiert.
Ich verbinde mich damit mit einem lokalem Gerät.
Ich baue dafür eine Socketverbindung auf.
In dem Emulator klappt auch alles prima,
Ich bin vebunden und kann Befehle senden.
Jetzt habe ich die mini-app aufs Galaxy-Tab kopiert und dort funktioniert die Verbindung nicht mehr.
Galaxy-Tab ist im gleichen Netz wie mein Entwicklungsrechner.
Muss ich da auf dem Tab noch was freigeben, dass das App eine Verbindung aufbauen darf?

Code:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Ist in der App gesetzt.

Danke für Eure Hilfe
 
Ich hab es gerade mal vom Smartphone getestet.
DA läuft es.
Liegt es an unterschiedlichen Androidversionen?
Beim Tab ist ja eine neuere drauf (3.xx?)
Auf dem Smartphone die 2.3
 
Hallo

Das Problem hatte ich auch schon. Ich habe daher eine Vermutung:
Du verwendest die Internetverbidung im Main-Thread, was Android 2.3.x noch zulässt Android 3.x aber nicht!
Das lässt sich testen, indem du dein Tablett an den Rechner anschließt und dann direkt auf dem Gerät debuggst, oder du einen neuen Emulator mit der passenden Android-Version erstellst.

Du dürftest dann eine "NetworkOnMainThreadException" bekommen.
Ein Besipiel!
 
  • Danke
Reaktionen: ThomasL
Danke Son Goku,

das wird es sein.
Ich stelle es heute Abend mal um.

Grüße
Thomas
 
Hallo zusammen,

so es lag an einer "NetworkOnMainThreadException".
Ich bekomme es aber trotzdem nicht gelöst.
Ich habe eine einfache Activtiy (UI) mit 3 Buttons.
Mit einem soll die Verbindung auf-/abgebaut werden und mit den anderen 2 kann dann ein Befehl versendet werden.
Die Verbindung in einem anderem Thread aufzubauen klappt.
Wenn ich die Connection dann aber mit runOnUiThread(new Runnable() {...
an die UIActivity übergeben will,
kommt wieder die Exception.
Ich bin Anfänger.
Wie kann ich in dem Ereignis der anderen beiden Buttons die Connection aus dem anderem Thread nutzen?
Muss ich in dem anderem Thread (mit der Connection) die Buttons anlegen und über runOnUiThread zuordnen?
Dann könnte ich in dem anderem Thread auf die Ereignisse reagieren.

Danke
Thomas
 
Hallo

Ich hab bisher auch noch nicht so viel damit gearbeitet. Aber ich würde Dir dennoch folgenden Aufbau empfehlen:

Speicher den Thread in einer deiner Klassenvariablen.
Code:
Thread t = new Thread(...);
Und immer wenn du einen der beiden anderen Buttons betätigst, kannst du mit "t.start()" bzw. "t.run()" - musst du testen, kann auch eine andere Methode sein (Doku) - in deinen Thread zurück kehren und die Verbindung, die du gespeichert hast wieder nutzen und ggf. auch wieder beenden.

Wenn du Erfolg hast, kannst du ja einen kurzen Schnipsel Code posten.
 
Ich würde das anders machen (ähnlich wie bei Java TCP Sockets and Swing Tutorial -> TCPChat.java)

Dein Connection-Thread liest und schreibt in einer Endlosschleife (bzw. bis z.B. Thread auf null gesetzt wird). Und für das Senden benutzt du eine String-Variable. Ist die Variable leer bzw. null, dann wird nichts gesendet, ansonsten wird der Befehl gesendet.

Sobald du nun auf deine Buttons klickst, brauchst du nur die Send-Variable entsprechend zu füllen und schon wird der Befehl übertragen. Da brauchste dann weder einen neuen Thread noch ein RunOnUI oder so ;-)
 
  • Danke
Reaktionen: ThomasL
Danke Tom299,

das ist eine prima Lösung.
Es klappt jetzt.

Danke
 
:thumbsup:
 
Top Link! Hast mein Bachelorarbeit gerettet! :thumbup:
 

Ähnliche Themen

M
Antworten
2
Aufrufe
895
maksimilian
M
SaniMatthias
Antworten
19
Aufrufe
963
swa00
swa00
M
Antworten
10
Aufrufe
824
maksimilian
M
Zurück
Oben Unten