1

文字列を受信する UDP サーバーを作成しています。その文字列を変更する必要がありますが、文字列を処理するクラスに文字列を転送する方法がわかりません。次の例外が発生します。

「looper.prepare() を呼び出していないスレッド内でハンドラーを作成できません」

私はアンドロイドの経験がほとんどなく、問題を解決する方法を理解できません.これに関する他の質問はどれも答えを与えてくれませんでした.

public class Server implements Runnable {

 @Override
 public void run() {
     while(!start)
     {
         //do nothing
     }
     try {
         InetAddress serverAddr = InetAddress.getByName(SERVERIP);
         //updateTrack("\nServer: Start connecting \n");
         DatagramSocket socket = new DatagramSocket(SERVERPORT, serverAddr);
         byte[] serverBuf = new byte[1064];
         DatagramPacket packet = new DatagramPacket(serverBuf, serverBuf.length);
         //updateTrack("Server: Receiving \n");
         socket.receive(packet);
         int realSize = packet.getLength();
         byte[] RealServerBuf = new byte[realSize];
         System.arraycopy (serverBuf, 0, RealServerBuf, 0, realSize);
         recived =  new String(RealServerBuf);
         //updateTrack("Server: " + recived + "\n");
         StringHandler stringHandler = new StringHandler();  
         stringHandler.StringSplitter(recived);
         updateTrack("Server: Succeed\n");
     } catch (Exception e) {
         updateTrack("Server: Error\n" + e);
     }
   }
}

この問題は、StringHandler.class をインスタンス化する方法と関係があり、UI スレッドに接続されていませんが、その方法がわかりません。

4

2 に答える 2

0

あなたのコードを中に入れてください

activity.runOnUiThread(new Runnable() {
  public void run() {
   // your code here
 }
});
于 2015-05-14T12:57:26.913 に答える