【发布时间】:2010-12-27 12:43:22
【问题描述】:
我是 smack API 的新手。我正在尝试开发一个聊天应用程序,我试图在其中设置和获取状态。
当我更改用户的状态时,它工作得非常好,并且会反映在 Openfire 服务器中。
但是当我尝试获取用户的存在时,我总是将状态显示为“不可用”,即使他在 openfire 中的存在显示为“可用”。
我正在使用以下代码来设置状态。
Presence presence = new Presence(Presence.Type.available);
presence.setStatus("Online, Programmatically!");
presence.setPriority(24);
presence.setMode(Presence.Mode.available);
user.getConnection().sendPacket(presence);
我正在使用 Roster 类来获取出席信息,如下所示。
Roster roster = avatar.getRoster();
Collection<RosterEntry> entries = roster.getEntries();
for(RosterEntry rosterEntry: entries) {
String user = rosterEntry.getUser();
Presence presence = roster.getPresence(user);
System.out.println("Presence : "+presence); // 1
System.out.println("Presence type: "+presence.getType()); // 2
System.out.println("Presence mode: "+presence.getMode()); // 3
}
第 1 行总是给出“不可用”,而第 2 行和第 3 行总是给出 null
我无法找出这个问题的原因。请帮我解决这个问题。
提前致谢。
【问题讨论】:
-
您想要出席的用户是否接受了您的订阅?如果没有,您将无法获得 Presence。