【问题标题】:roster.getEntities() always return null aSmack androidroster.getEntities() 总是返回 null aSmack android
【发布时间】:2014-07-01 09:22:03
【问题描述】:

我想使用 xmpp 和 asmack 制作一个聊天应用程序,但我遇到了一个问题:我无法获取服务器上的所有用户。首先我建立了一个连接,然后我登录了它,然后我尝试检索用户,但我总是得到一个空集合。

public void connect() {

    final ProgressDialog dialog = ProgressDialog.show(this,
            "Connecting...", "Please wait...", false);

    Thread t = new Thread(new Runnable() {

        @Override
        public void run() {
            // Create a connection
            ConnectionConfiguration connConfig = new ConnectionConfiguration(
                    HOST, PORT, SERVICE);
            XMPPConnection connection = new XMPPConnection(connConfig);

            try {
                connection.connect();
                Log.i("XMPPChatDemoActivity",
                        "Connected to " + connection.getHost());
            } catch (XMPPException ex) {
                Log.e("XMPPChatDemoActivity", "Failed to connect to "
                        + connection.getHost());
                Log.e("XMPPChatDemoActivity", ex.toString());
                setConnection(null);
            }
            try {
                // SASLAuthentication.supportSASLMechanism("PLAIN", 0);
                connection.login(USERNAME, PASSWORD);
                Log.i("XMPPChatDemoActivity",
                        "Logged in as " + connection.getUser());

                // Set the status to available
                Presence presence = new Presence(Presence.Type.available);
                connection.sendPacket(presence);
                setConnection(connection);

                // here in roster i always get null.

                Collection<RosterEntry> roster = connection.getRoster()
                        .getEntries();

                for (RosterEntry entry : roster) {
                    Log.d("XMPPChatDemoActivity",
                            "--------------------------------------");
                    Log.d("XMPPChatDemoActivity", "RosterEntry " + entry);
                    Log.d("XMPPChatDemoActivity",
                            "User: " + entry.getUser());
                    Log.d("XMPPChatDemoActivity",
                            "Name: " + entry.getName());
                    Log.d("XMPPChatDemoActivity",
                            "Status: " + entry.getStatus());
                    Log.d("XMPPChatDemoActivity",
                            "Type: " + entry.getType());


                }
            } catch (XMPPException ex) {
                Log.e("XMPPChatDemoActivity", "Failed to log in as "
                        + USERNAME);
                Log.e("XMPPChatDemoActivity", ex.toString());
                setConnection(null);
            }

            dialog.dismiss();
        }
    });
    t.start();
    dialog.show();
}

【问题讨论】:

  • 您使用的是哪个版本的 aSmack?
  • 是的,嗯,这就像一个 4 岁的版本。试试 aSmack 4.0.0。
  • 现在我正在使用 asmack-android-8-4.0.0,我给了我异常 java.lang.NoClassDefFoundError: org.jivesoftware.smack.ConnectionConfiguration
  • @Raghunandan 链接已损坏.. 你能更新一下吗
  • @chhameed 我不知道为什么链接被破坏了。我已删除评论

标签: android xmpp smack asmack


【解决方案1】:

要获取名册,只需搜索一个名为注册属性的插件,或者如果它是预安装的,请在用户部分搜索它。

然后选中启用自动将新用户添加到组。 同样在底部创建一个新的默认组,以便在创建新用户时将其自动添加到此默认组中。

之后运行相同的代码,您将获得基于 xmpp 协议的服务器上的所有用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-31
    • 2018-01-16
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    相关资源
    最近更新 更多