作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 smack API 的新手。我正在尝试开发一个聊天应用程序,我试图在其中设置和获取状态。
当我更改用户的存在时,它工作得很好,并且反射(reflect)在 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
我无法找出这个问题的原因。请帮我解决这个问题。
提前致谢。
最佳答案
使用RosterListener
是解决此问题的正确方法。代码没有理由应该有 Thread.sleep()
才能使其正常工作。
Roster roster = con.getRoster();
roster.addRosterListener(new RosterListener() {
// Ignored events public void entriesAdded(Collection<String> addresses) {}
public void entriesDeleted(Collection<String> addresses) {}
public void entriesUpdated(Collection<String> addresses) {}
public void presenceChanged(Presence presence) {
System.out.println("Presence changed: " + presence.getFrom() + " " + presence);
}
});
(来源:http://www.igniterealtime.org/builds/smack/docs/latest/documentation/roster.html)
关于openfire - 无法使用 smack、openfire 获取名册的存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1919489/
我正在构建一个 ejabberd 模块,用于将消息的副本发送到外部 RESTful API。一切正常,对该 API 的请求正在发送带有发件人、收件人和消息正文的 POST 参数。 我为此触发了 use
我正在使用此代码获取用户的在线状态 Roster roster = connection.getRoster(); Presence userPresence = roster.getPr
我是一名优秀的程序员,十分优秀!