roster.getPresence 给出不可用

roster.getPresence gives unavailable

我正在使用 smack api。

        Presence presencePacket = new Presence(Presence.Type.subscribe);
        presencePacket.setTo("dhmohn@example.com");
        conn1.sendPacket(presencePacket);

        Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.accept_all);
        Roster roster=conn1.getRoster();

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

        for (RosterEntry entry : entries) {
            System.out.println(roster.getPresence(entry.getUser()));
        }

在上面的代码中 roster.getPresence(entry.getUser()) 给出状态 unavailable

此外,我还有以下疑问:

  1. 此处 dhmohn@example.com 是用户名为 danmorgan 的用户的电子邮件 ID。我使用的 jid 正确吗?
  2. 如果上面的jid是错误的,那么正确的jid是什么?顺便说一句,我也尝试了以下 jiddanmorgan@saint-pc.

请注意,在 openfire 服务器 上,我已将两个用户的订阅模式设置为

Presence presence = new Presence(Presence.Type.available); connection.sendPacket(存在);

                Roster roster = connection.getRoster();
                roster.addRosterListener(new RosterListener() {

                    @Override
                    public void presenceChanged(Presence presence) {
                        // TODO Auto-generated method stub
                        String user = presence.getFrom();
                        // Presence bestPresence = roster.getPresence(user);
                        Log.e("User Presence--------->****-->",
                                "User Name-----" + user
                                        + "Online or Offline ---->"
                                        + presence.isAvailable());
                    }

                    @Override
                    public void entriesUpdated(Collection<String> arg0) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void entriesDeleted(Collection<String> arg0) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void entriesAdded(Collection<String> arg0) {
                        // TODO Auto-generated method stub

                    }
                });

在这里,您可以在状态发生变化时获取用户状态更新。

JID是必不可少的一部分

始终使用 JID 登录。 JIDusernameserver name 的组合。 所以,在我的例子中,JID 将是 username@server-name 即 dhmohn@saint-pc 因为 usernamedhmohn 服务器名称 saint-pc.

请注意,如果您使用以下代码登录,那么您的名册将始终为空:

conn1.login("dhmohn", "Dhmohn123");

而是始终使用 jabber ID 登录:

conn1.login("dhmohn@saint-pc", "Dhmohn123");

登录后,让线程休眠 10 秒。稍后获取花名册。

可以在 Openfire 的管理控制台中找到 服务器名称:

server tab ->server manager->server informaton->server properties