0

onCreate メソッドでスレッドを作成しています。スレッドで udp 経由でデータを受信します。何らかの理由で機能しません。

private void UdpThread() {
//   server will listen to one client
    try
    {
        Thread udpServerThread = new Thread()
        {
            @Override
            public void run()
            {       
                Log.i("rrr","receivePacket3");
                try
                {
                    while(true)
                    {
                        sleep(1000);
                    Log.i("rrr","receivePacket2");
                    String[] recieved = null;

                    DatagramSocket clientSocket = null;
                    InetAddress IPAddress = null;
                    try {

                        IPAddress = InetAddress.getByName("localhost");
                    } catch (UnknownHostException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    byte[] receiveData = new byte[1500];
                    DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                    try {
                        clientSocket = new DatagramSocket(8086);
                        Log.i("rrr","receivePacket");
                        clientSocket.receive(receivePacket);

                        Log.i("rrr","receivePacket1");
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    modifiedSentence = new String(receivePacket.getData());
                    System.out.println("in client receive:" + modifiedSentence);

                    Log.i("Received data",modifiedSentence);
                    clientSocket.close();

                    modifiedSentence =  modifiedSentence.trim();
                    Log.i("Received data",modifiedSentence);
                    }
                } catch (Exception e){
                    Log.e("UDP", "S: Error", e);
                }
            }
        };
        udpServerThread.start();
        //udpServerThread.setPriority(Thread.MAX_PRIORITY);

        Toast.makeText(this,modifiedSentence,Toast.LENGTH_LONG).show();

    }catch (Exception e) {
        // TODO: handle exception
        Log.e("eeeee",""+e);
        e.printStackTrace();
    }
}

制御がスレッドからすぐに返されない場合はどうすればよいですか。データが受信されないまで待ちます。

4

2 に答える 2

0

2番目のスレッドからメインスレッドを操作するには、Androidでハンドラーを使用する必要があります... ex.

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        new Thread(new Runnable() {
           public void run() {
            try{
                Message myMessage = new Message();
                myMessage.obj = "SEND ANY DATA";
            }
            catch (JSONException e) {
            e.printStackTrace();
            }

            }).start();

そしてハンドラーで.....

 private Handler finishHandler1 = new Handler() {
        @Override 
        public void handleMessage(Message msg) {
            // do the UI things..

        }
    };
于 2012-07-31T11:18:14.163 に答える
0

Handler オブジェクトを作成して初期化し、MAIN または UI スレッドで実行する必要があります。その後、メッセージと Runnables をワーカー スレッドからハンドラーに投稿できるようになります。

または、使用することができます

Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)

Androidのマルチスレッド ガイドも非常に役立つ場合があります。

于 2012-07-31T12:35:54.673 に答える