Javafx Smack花名册条目为空

Javafx Smack花名册条目为空,javafx,smack,Javafx,Smack,我正在为openfire聊天客户端创建一个JavaFX应用程序。 我正在使用smack 4.1 rc1连接到服务器。 我能够连接到服务器,向其他人发送状态信息,并向其他用户发送消息。 然而,我无法反复浏览名册 当我获取花名册对象并调试它时,它会显示一个包含3个花名册条目的哈希映射,这意味着花名册正在加载到花名册对象中。然而,当我使用花名册.getentries方法将其存储到花名册条目的集合中时,它显示0对象。即使是花名册.getentriescount()方法也返回0,尽管我可以在调试视图中看到

我正在为openfire聊天客户端创建一个JavaFX应用程序。 我正在使用smack 4.1 rc1连接到服务器。 我能够连接到服务器,向其他人发送状态信息,并向其他用户发送消息。 然而,我无法反复浏览名册

当我获取花名册对象并调试它时,它会显示一个包含3个花名册条目的哈希映射,这意味着花名册正在加载到花名册对象中。然而,当我使用
花名册.getentries
方法将其存储到花名册条目的
集合中时,它显示0对象。即使是
花名册.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());
试试看{
config=XMPPTCPConnectionConfiguration.builder()
.setUserName和密码(mUserName+“@”+域,mPassword)
.setServiceName(主机名)
.setHost(主机名)
.setPort(端口名)
.setResource(资源)
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.build();
mXmppConnection=新的XMPPTCPConnection(配置);
mXmppConnection.connect();
mXmppConnection.login();
//存在=新存在();
存在;
if(mPresence)presence=新的presence(presence.Type.available);
else presence=新状态(presence.Type.unavailable);
存在。设置状态(“在Smack上”);
XMPPConnection conn=(XMPPConnection)MXMPP连接;
Chat Chat=ChatManager.getInstanceFor(mXmppConnection).createChat
("monika@ipaddress");
sendMessage(“来自smack的你好!”);
//发送数据包(假设我们有一个名为“con”的XMPPConnection实例)。
mXmppConnection.sendPacket(存在);
System.out.println(“连接成功”);
花名册=花名册.getInstanceFor(conn);
集合条目=花名册.getEntries();
int i=0;
对于(排班条目:条目){
系统输出打印项次(输入);
i++;
}
System.out.println(“花名册计数-”+i+floster.getEntryCount());

以前有人遇到过同样的问题吗?

在调用getEntries之前,您可能需要检查是否加载了花名册

Roster roster = Roster.getInstanceFor(connection);

if (!roster.isLoaded()) 
    roster.reloadAndWait();

Collection <RosterEntry> entries = roster.getEntries();
花名册=花名册.getInstanceFor(连接);
如果(!花名册.isLoaded())
花名册。重新加载并等待();
集合条目=花名册.getEntries();
谢谢您的支持

这里是完整的代码

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());
    }
}
public void getRoaster(最终回调){
最终花名册=花名册.getInstanceFor(连接);
如果(!花名册.isLoaded())
试一试{
花名册。重新加载并等待();
}捕获(SmackException.NotLoggeDineException | SmackException.NotConnectedException | InterruptedException e){
e、 printStackTrace();
}
集合条目=花名册.getEntries();
对于(排班条目:条目){
android.util.Log.d(AppConstant.PUBLIC_标记,entry.getName());
}
}

我刚刚解决了这个问题。我使用OpenFire作为XMPP服务器。我在花名册中的用户中检查了字段“Subscription”,它是“None”。在用“Both”更改它之后,它工作了,条目正在被提取


希望有帮助!

没有看到您是如何设置连接参数的,也许这就是问题所在。不过,请查看。名册已加载,但它仍会返回0个条目。