如何在android上使用smack获得openfire xmpp服务器上的所有用户?

如何在android上使用smack获得openfire xmpp服务器上的所有用户?,android,xmpp,smack,Android,Xmpp,Smack,我正在使用smack和openfire在android中开发聊天应用程序,现在我面临的问题是显示所有用户的列表,以便这些用户可以被邀请聊天,我尝试使用下面的代码使用花名册,但花名册条目的大小始终为零。当我正确登录时。下面是我的代码片段 Roster roster =Roster.getInstanceFor(xmppConnection); Collection<RosterEntry> entries = roster.getEntries(); f

我正在使用smack和openfire在android中开发聊天应用程序,现在我面临的问题是显示所有用户的列表,以便这些用户可以被邀请聊天,我尝试使用下面的代码使用花名册,但花名册条目的大小始终为零。当我正确登录时。下面是我的代码片段

Roster roster =Roster.getInstanceFor(xmppConnection);
        Collection<RosterEntry> entries = roster.getEntries();
        for (RosterEntry entry : entries) {
            System.out.println(entry);
        }
花名册=花名册.getInstanceFor(xmppConnection);
集合条目=花名册.getEntries();
对于(排班条目:条目){
系统输出打印项次(输入);
}
花名册=花名册.getInstanceFor(连接对象);
addRosterLoadedListener(新的RosterLoadedListener(){
@凌驾
名册加载时的公共无效(名册){
设置条目=花名册.getEntries();
对于(排班条目:条目){
Log.d(“XMPPChatDemoActivity”,“Name:+entry.getName());
Log.d(“xmppchatdomactivity”,“Id:+entry.getUser());
Presence entryPresence=花名册.getPresence(entry.getUser());
Log.d(“XMPPChatDemoActivity”,“状态信息:+entryPresence.getStatus());
Log.d(“XMPPChatDemoActivity”,“状态类型:”+entryPresence.getType());
}
}
});

这是因为加载花名册需要一段时间。你可以:

  • 使用一个
  • 重新加载并等待:
    如果(!花名册.isLoaded())花名册.relloadendwait()

  • 看看我在这篇文章中的答案,添加一些关于这个答案如何帮助解决当前问题的解释。这是因为当你试图访问花名册条目时,它没有任何内容,你必须向它添加侦听器。因此,它将通知您,您可以在加载花名册条目时访问花名册条目。
    Roster roster = Roster.getInstanceFor(connection_obj);
        roster.addRosterLoadedListener(new RosterLoadedListener() {
            @Override
            public void onRosterLoaded(Roster roster) {
                Set<RosterEntry> entries = roster.getEntries();
                for (RosterEntry entry : entries) {
                    Log.d("XMPPChatDemoActivity", "Name: "+entry.getName());
                    Log.d("XMPPChatDemoActivity", "Id: " + entry.getUser());
                    Presence entryPresence =roster.getPresence(entry.getUser());
                    Log.d("XMPPChatDemoActivity", "Presence Status: " +        entryPresence.getStatus());
                    Log.d("XMPPChatDemoActivity", "Presence Type: " + entryPresence.getType());
                }
            }
        });