我正在为openfire聊天客户端创建一个java fx应用程序。 我正在使用smack 4.1 rc1连接到服务器。 我能够连接到服务器向其他人发送状态信息,并向其他用户发送消息。 但是我无法遍历名单。
当我获得名单对象并对其进行调试时,它显示了3个名单条目的哈希映射,这意味着名单正在加载到名册对象中。但是,当我使用roster.getentries
方法将其存储到名单条目的Collection
时,它显示0对象。即使roster.getentriescount()
方法返回0,虽然我可以在调试视图中看到名册用户名
try {
config = XMPPTCPConnectionConfiguration.builder()
.setUsernameAndPassword(mUserName+ "@" + Domain, mPassword)
.setServiceName(HostName)
.setHost(HostName)
.setPort(PortName)
.setResource(Resource)
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.build();
mXmppConnection = new XMPPTCPConnection(config);
mXmppConnection.connect();
mXmppConnection.login();
// Presence presence=new Presence();
Presence presence ;
if(mPresence) presence = new Presence(Presence.Type.available);
else presence = new Presence(Presence.Type.unavailable);
presence.setStatus("On Smack");
XMPPConnection conn=(XMPPConnection) mXmppConnection;
Chat chat = ChatManager.getInstanceFor(mXmppConnection).createChat
("monika@ipaddress");
chat.sendMessage("Howdy from smack!");
// Send the packet (assume we have a XMPPConnection instance called "con").
mXmppConnection.sendPacket(presence);
System.out.println("Connected successfully");
Roster roster = Roster.getInstanceFor(conn);
Collection<RosterEntry> entries = roster.getEntries();
int i=0;
for (RosterEntry entry : entries) {
System.out.println(entry);
i++;
}
System.out.println("Rosters Count - "+ i+ roster.getEntryCount());
之前有没有人遇到过同样的问题?
答案 0 :(得分:3)
在调用getEntries之前,您可能必须检查是否已加载名单。
Roster roster = Roster.getInstanceFor(connection);
if (!roster.isLoaded())
roster.reloadAndWait();
Collection <RosterEntry> entries = roster.getEntries();
答案 1 :(得分:1)
这里是完整的代码
public void getRoaster(final Callback<Collection<RosterEntry>> callback) {
final Roster roster = Roster.getInstanceFor(connection);
if (!roster.isLoaded())
try {
roster.reloadAndWait();
} catch (SmackException.NotLoggedInException | SmackException.NotConnectedException | InterruptedException e) {
e.printStackTrace();
}
Collection<RosterEntry> entries = roster.getEntries();
for (RosterEntry entry : entries) {
android.util.Log.d(AppConstant.PUBLIC_TAG, entry.getName());
}
}
答案 2 :(得分:0)
我刚刚解决了这个问题。我正在使用OpenFire作为XMPP服务器。我检查了名单中用户的“订阅”字段,结果为“无”。在通过“Both”更改它之后,它工作,并且正在获取条目。
希望它有所帮助!