我如何通过XMPP aSmack获得所有用户状态信息(离线/在线/离开/等)

时间:2015-02-04 11:23:14

标签: java android xmpp asmack livechat

我正在尝试使用XMPP(aSmack)实现Android聊天应用程序。我检查我的代码是否正确可以登录,注册。现在我想获取所有用户信息(离线/在线/离开/等)我尝试使用Presence.But我不能成功。当xmpp连接正常并且用户登录成功时,我通过

调用Presence
if (connection != null && connection.isConnected()) {
        Presence presence = new Presence(Presence.Type.available);
        presence.setStatus("I’m available");
        connection.sendPacket(presence);
        Log.w("type", "I’m available");
    }

调用此函数后,我尝试获取所有用户信息。我的名单代码是:

    Roster roster = connection.getRoster();
    // Get all rosters
    Collection<RosterEntry> entries = roster.getEntries();
    Log.w("Size ", "are"+entries.size());
    // loop through
    for (RosterEntry entry : entries) {
        // example: get presence, type, mode, status
        Presence entryPresence = roster.getPresence(entry.getUser());
        Presence.Type userType = entryPresence.getType();
        Presence.Mode mode = entryPresence.getMode();
        String status = entryPresence.getStatus();

        Log.w("mode ", "are"+mode);
        Log.w("status ", "are"+status);
        Log.w("mode ", "are"+entryPresence.isAvailable());
    }

但是我的问题,所有的时间我得到一个条目大小,我是谁。没有我的模式显示所有时间错误(这意味着我不可用)。我不明白它是什么问题。我需要工作服务器配置。再次。或者我的代码是错的。请帮助我如何解决这两个问题。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用连接对象

从服务器获取所有名单
Roster roster = mConnection.getRoster();

其中mConnection是xmpp连接对象。您还应该将名册侦听器添加到名单对象。

有关详细信息,请参阅this link