2016-06-23 23 views
-1

Aus dem Hauptthread meiner App, versuche ich String-Nachrichten zu senden, die an TCPClient gesendet werden, wird kontinuierlich über den Socket senden.Fehler beim Senden der String-Nachricht an Handler: String kann nicht in int konvertiert werden

Das ist mein TCPClient:

public class TCPClient extends Thread 
{ 
    String ip; 
    int port; 
    PrintWriter out; 
    Handler handler; 

    TCPClient(String ip, int port) 
    { 
     this.ip = ip; 
     this.port = port; 

     try 
     { 
      Socket socket = new Socket(ip,port); 

      BufferedReader in = new BufferedReader(
        new InputStreamReader(socket.getInputStream())); 
      out = new PrintWriter(socket.getOutputStream(), true); 

     }catch (Exception e) 
     { 
      Log.d("OKLINUX","Exception while creating socket"); 
      e.printStackTrace(); 
     } 
    } 

    public void run() 
    { 
     Looper.prepare(); 
     handler = new Handler(){ 
      public void handleMessage(Message msg) 
      { 
       Log.d("OKLINUX","Data sent : "+msg.arg1); 
       out.println(msg.arg1); 
       out.flush(); 
      } 
     }; 
     Looper.loop(); 
    } 
} 

Auf meinem Haupt-Thread:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     sender = new TCPClient("192.168.0.7",2016); 
     sender.start(); 

     //some other code 

     Message msg = Message.obtain(); 
     msg.arg1 = "some string"; //this line gives error 
     sender.handler.sendMessage(msg); 
} 

Wie kann ich die Zeichenfolge übergeben?

+0

Wo möchten Sie eine Zeichenfolge übergeben? – Puneet

+0

'public int arg1; 'ist eine Zeile aus dem Quelltext der Nachricht. 'arg1' und' arg2' sind kostengünstigere Alternativen zur Verwendung von setData(), wenn Sie nur einige ganzzahlige Werte speichern müssen. Das heißt, Sie können nur Integer speichern, nicht String in der Variablen arg1. – Jimmy

Antwort

0

Weil arg1 und arg2 int-Werte für die Übergabe des Anforderungstyps sind. Benutze arg.obj statt

0

Nach dem Javadoc arg1 ist ein int kein String das ist, warum Sie diese Ausnahme bekommen.

Mehr Details here

arg1 und arg2 sind preiswertere Alternativen zur Verwendung von setData(), wenn Sie nur wenige ganzzahlige Werte speichern müssen.

Still aus dem javadoc, sollten Sie versuchen, obj statt

Ein beliebiges Objekt an den Empfänger zu senden, zu verwenden. Bei Verwendung von Messenger zu senden Sie die Nachricht über Prozesse kann dies nur nicht null sein, wenn es enthält ein Parcelable einer Framework-Klasse (nicht eine von der Anwendung implementiert). Für andere Datenübertragungen verwenden Sie setData (Bundle).

Verwandte Themen