我是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,但这也没有用。
我误解了一些核心概念吗?有人能引导我走上正确的道路吗?
答案 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
}
}
}
}