1

私はAndroidを初めて使用します。現在のプロジェクトでは、asmackライブラリを使用してXMPPメッセージを受信して​​います。私のMainActivityには次のものがあります。

Connection connection; // from the asmack library

connection.addPacketListener(new PacketListener() {
    public void processPacket(Packet packet) {
        // HERE! is where I want to update the UI when I receive packets
    }
}

奇妙なことに、パケットを解析して、2つのラベルでsetText()を呼び出すだけです。最初は何も起こりませんが、ボタンをタッチすると(したがって、更新ルーチンを呼び出すと)、最初のラベルのみが更新されます。

さて、私が理解した限りでは、そのような場合にAsyncTaskを使用することになっていますが、これもうまくいきませんでした。

私はいくつかのコアコンセプトを誤解しましたか?誰かが私を正しい道に導くことができますか?

4

1 に答える 1

0

パケットはUIスレッドとは別のスレッドで処理されているようです。つまり、そのスレッドでパケットを操作していないため、UIはすぐには更新されません。したがって、このようなことを行う必要があります...

connection.addPacketListener(new PacketListener(){

    public void processPacket(Packet packet){

        //update the UI on its thread
        runOnUiThread(new Runnable()){
            public void run(){
                //update UI elements
            }
        }

    }

}
于 2012-09-12T14:10:13.783 に答える