1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Socket-Verbindung klappt nicht

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von ThomasL, 11.01.2012.

  1. ThomasL, 11.01.2012 #1
    ThomasL

    ThomasL Threadstarter Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    1
    Registriert seit:
    11.01.2012
    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
     
  2. ThomasL, 11.01.2012 #2
    ThomasL

    ThomasL Threadstarter Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    1
    Registriert seit:
    11.01.2012
    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
     
  3. Son Goku, 12.01.2012 #3
    Son Goku

    Son Goku Android-Hilfe.de Mitglied

    Beiträge:
    55
    Erhaltene Danke:
    5
    Registriert seit:
    07.12.2010
    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!
     
    ThomasL bedankt sich.
  4. ThomasL, 12.01.2012 #4
    ThomasL

    ThomasL Threadstarter Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    1
    Registriert seit:
    11.01.2012
    Danke Son Goku,

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

    Grüße
    Thomas
     
  5. ThomasL, 16.01.2012 #5
    ThomasL

    ThomasL Threadstarter Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    1
    Registriert seit:
    11.01.2012
    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
     
  6. Son Goku, 16.01.2012 #6
    Son Goku

    Son Goku Android-Hilfe.de Mitglied

    Beiträge:
    55
    Erhaltene Danke:
    5
    Registriert seit:
    07.12.2010
    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.
     
  7. Tom299, 17.01.2012 #7
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    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 ;-)
     
    ThomasL bedankt sich.
  8. ThomasL, 18.01.2012 #8
    ThomasL

    ThomasL Threadstarter Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    1
    Registriert seit:
    11.01.2012
    Danke Tom299,

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

    Danke
     
  9. Tom299, 18.01.2012 #9
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    :thumbsup:
     
  10. thorzten, 21.01.2012 #10
    thorzten

    thorzten Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    1
    Registriert seit:
    28.06.2010
    Top Link! Hast mein Bachelorarbeit gerettet! :thumbup:
     

Diese Seite empfehlen