2016-06-23 3 views
-1

私のアプリケーションのメインスレッドから、TCPClientに送信される文字列メッセージを送信しようとしています。文字列メッセージをHandlerに送信中にエラーが発生しました:文字列をintに変換できません

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); 
} 

がどのように文字列を渡すことができます:私のメインスレッド上

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(); 
    } 
} 

これは私れるtcpClientのですか?

+0

ここで、文字列を渡しますか? – Puneet

+0

'public int arg1; 'はMessageのソースコードからの行です。 'arg1'と' arg2'は、いくつかの整数値を格納するだけでよいなら、setData()を使うより安価な方法です。つまり、変数arg1に文字列ではなく整数のみを格納することができます。 – Jimmy

答えて

0

arg1とarg2はリクエストタイプを渡すためのint値です。代わりにarg.objを使用する

0

javadocによると、arg1は、ではないので、この例外が発生する理由はintではありません。

詳細here

ARG1とARG2はあなた はわずか数整数値を格納する必要がある場合()にsetDataを使用する低コストの代替手段です。

それでものjavadocから、あなたは、受信者に送信するobj代わり

任意のオブジェクトを使用するようにしてください。 Messengerを使用して にメッセージを送信すると、 には、フレームワーククラスのParcelable( アプリケーションで実装されていないもの)が含まれている場合に限り、null以外になることがあります。他のデータ転送には、setData(Bundle)を使用します。

関連する問題