我正在使用asmack api将gtalk与我的Android应用程序集成我可以登录,可以向我的联系人用户发送消息,但我想知道所有联系人的状态,无论他/她是在线还是离线,我用名册来了解它但是显示所有用户的可用性都是离线的,没有人在网上出现,实际上,有些用户在线,想知道出了什么问题。有人可以帮忙吗?在下面粘贴我的代码:
Roster roster= connection.getRoster();
roster.setSubscriptionMode(Roster.getDefaultSubscriptionMode());
Collection<RosterEntry> entries = roster.getEntries();
Presence presence2;
for(RosterEntry entry : entries) {
presence2 = roster.getPresence(entry.getUser());
System.out.println(entry.getUser());
System.out.println(presence2.getType());
// System.out.println(presence2.getStatus());
}
也试过了presence2.getMode(),但它返回null。 任何帮助将不胜感激
答案 0 :(得分:0)
你在什么时候试图获得名单?你有没有尝试过presence2.isAvailable()?我还建议设置一个名册监听器,否则,当任何用户的状态发生变化时,您的列表将不会更新。
答案 1 :(得分:0)
这是我为BuddyList类所做的。我将gridview传递给了一个buddylist类,并在一个线程中运行此代码以更新连接到适配器的数组。我知道这已经有几个月了,但是在某些方面它会帮助别人。只需确保从新线程调用updateBuddies。当您离开托管业余爱好者的活动时,请务必关闭此线程。欢呼声。
http://i.imgur.com/4o7JLkx.png
private void updateBuddies() {
final Roster roster = connection.getRoster();
roster.addRosterListener(new RosterListener() {
@Override
public void entriesAdded(Collection<String> arg0) {
// TODO Auto-generated method stub
}
@Override
public void entriesDeleted(Collection<String> arg0) {
// TODO Auto-generated method stub
}
@Override
public void entriesUpdated(Collection<String> arg0) {
// TODO Auto-generated method stub
}
@Override
public void presenceChanged(Presence arg0) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
addressA.clear();
nameA.clear();
modeA.clear();
availA.clear();
statusA.clear();
grid.invalidateViews();
Collection<RosterEntry> entries = roster.getEntries();
for(RosterEntry r:entries) {
if (r.getName() != null) {
String email = r.getUser();
String name = r.getName();
Presence pres = roster.getPresence(r.getUser());
if (pres != null) {
addressA.add(email);
nameA.add(name);
modeA.add(""+pres.getMode());
availA.add(""+pres.getType());
statusA.add(""+pres.getStatus());
}
}
}
adapter.notifyDataSetChanged();
}});
}});
}