XMPP消息到达时更新UI

时间:2012-09-12 12:55:47

标签: android

我是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
    }
}

奇怪的是当我解析数据包并简单地在两个标签上调用setText()时。最初没有任何反应,但是当我触摸一个Button(因此调用一些更新程序)时,只更新了第一个标签。

现在,据我所知,你应该在这种情况下使用AsyncTask,但这也没有用。

我误解了一些核心概念吗?有人能引导我走上正确的道路吗?

1 个答案:

答案 0 :(得分: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
            }
        }

    }

}