roster.getPresence不可用

时间:2015-01-06 09:43:32

标签: java xmpp chat openfire smack

我正在使用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 ?顺便说一句,我也尝试了以下 jid danmorgan@saint-pc
  3. 请注意,在 openfire服务器为用户设置订阅模式

2 个答案:

答案 0 :(得分:1)

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

                    }
                });

此处您可以在进行离线时更新用户状态,并在状态更改时联机。

答案 1 :(得分:1)

JID 是不可或缺的部分。

始终使用 JID 登录。 JID 用户名服务器 名称的组合。 因此,在我的情况下,JID将是username @ server-name,即 dhmohn @ saint-pc ,因为用户名 dhmohn 服务器名称 saint-pc

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

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

相反,始终使用jabber ID登录:

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

登录后,让线程进入睡眠状态10秒钟。后来取了名单。

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

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