0

Android用のP2Pチャット/共有アプリケーションを開発しています。次のコードは UDP パケットを受信するためのものですが、最初のメッセージ/パケットのみが受信されて表示されます。(送信コードに問題はありません。) 以降のチャットメッセージが表示されません。while ループは、chahistory.setText(new String.... が実行された後に終了するようです。eg:chathistory.setText("test"); は実行されません。誰かエラーを指摘できますか?例外はスローされません。

public void receive() throws Exception
        {
        (new Thread(new Runnable() {

        @Override
        public void run() {
            try 
            {
                ds1=new DatagramSocket(7777);
                //chathistory.setText("Holding the port...");

                while(true)
                {

                    DatagramPacket p = new DatagramPacket(buffer, buffer.length);
                    ds1.receive(p);
                    chathistory.setText(new String(p.getData(), 0, p.getLength()));
                    chathistory.setText("test");

                }
            }
                    catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
        }   

        } })).start();
    }
4

1 に答える 1

0

1つは、AndroidのUI呼び出しはいずれもスレッドセーフではなく、プロセスのメインスレッドはUIの更新に専念しているため、アクティビティが実行されているスレッド以外のスレッドからAndroidのUI要素を操作しないでください。

2つ目は、logcatが別のスレッドから印刷できないため、例外をスローする可能性があることです。

3つ目は、このコードがあなたを強制的に閉じようとしたことがあるかどうか知りたいのですが、.receiveが非常に長い間ブロックされた場合に、Androidが何をするのか知りたいので、おそらくタイムアウトを使用する必要があります。

于 2011-10-15T21:53:36.250 に答える