javafx - Smack 名单条目为空

标签 javafx smack

我正在为 openfire 聊天客户端创建一个 java fx 应用程序。 我正在使用 smack 4.1 rc1 连接到服务器。 我能够连接到服务器,向其他人发送存在信息,并向其他用户发送消息。 但是我无法遍历名册。

当我获取名册对象并对其进行调试时,它会显示 3 个名册条目的 HashMap ,这意味着名册正在加载到名册对象中。但是,当我使用 roster.getentries 方法将其存储到名册条目的 Collection 中时,它显示 0 对象。尽管我可以在调试 View 中看到名册用户名,但即使 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());

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

最佳答案

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

Roster roster = Roster.getInstanceFor(connection);

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

Collection <RosterEntry> entries = roster.getEntries();

关于javafx - Smack 名单条目为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28643189/

相关文章:

java - 使用 JNativeHook 仅读取每个按键一次

java - JavaFX 2.0 中的绑定(bind)

android - 如何检查客户端是否连接到 XMPP 服务器

android - 使用 proguard 时 smack for android 失败

android - 如何通过在android中编码在openfire上创建一个组

java - 如何将数据添加到 JavaFX 表行/单元格

java - 无法从 JavaFX 操作标签

java - 无法将简单的 Java Smack 示例连接到 Google Talk

xmpp - 如何在xmpp的花名册中添加新好友

java - 当你有 CellFactory 时,如何在更改根时完全重置 TreeView?