在 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)。
我正在使用 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)。