1

我是安卓新手。在我当前的项目中,我使用 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
    }
}

奇怪的是当我解析数据包并在两个标签上简单地调用 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 回答