在 smack android 中存在更改方法时无法更新 ui

Cant update ui in on presence changed method in smack android

我正在使用 smack 和 openfire 创建一个 android 应用程序 android.I 已使用侦听器来更改用户状态。. 下面是我的代码..

toolbar_status=(TextView)findViewById(R.id.toolbar_status) ;
    roster.addRosterListener(new RosterListener() {
                @Override
                public void entriesAdded(Collection<String> addresses) {

                }

                @Override
                public void entriesUpdated(Collection<String> addresses) {

                }

                @Override
                public void entriesDeleted(Collection<String> addresses) {

                }

                @Override
                public void presenceChanged(Presence presence) {
                    Log.wtf("CRA","Presence changes---------------");
                    Log.wtf("CRA","new presence is : "+presence.getFrom()+" "+presence.isAvailable());
                    toolbar_status.setText(setStatus(presence.isAvailable()));
                }
            });

如您所见,我正在使用当前值更新名为 toolbar_status 的文本视图... 问题是调用了 presenceChanged 函数,甚至还显示了日志,但当前值未在 运行 更新 time.The 当我重新打开 activity 时,值设置为文本视图。 也就是说,在 presenceChanged 函数中,我无法在 运行 时间与 UI 交互。 我是初学者 android.Please 帮我看看哪里错了 我该如何解决..

presenceChanged() 可能正在从后台线程调用(我不确定,不熟悉 Smack)。

如果是这样,你不能从那里触摸 UI。

您可以执行以下操作:

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        toolbar_status.setText(setStatus(presence.isAvailable()));
    }
});

哪个post这个Runnable到主线程的消息队列(从那里可以更新UI)。