【问题标题】:Can I get online users in my friend list via Smack?我可以通过 Smack 在我的好友列表中获取在线用户吗?
【发布时间】:2011-06-07 15:32:23
【问题描述】:

我可以通过 Smack API 在我的好友列表中获取在线用户吗?有可能吗?

我正在开发可以在用户之间进行聊天的应用。我已经成功创建了聊天应用程序示例,只需输入朋友的姓名并发送聊天,但现在我想要在线朋友列表。

【问题讨论】:

    标签: android api smack


    【解决方案1】:
    Roster roster = xmppConnection.getRoster();
    Collection<RosterEntry> entries = roster.getEntries();
    Presence presence;
    
    for(RosterEntry entry : entries) {
        presence = roster.getPresence(entry.getUser());
    
        System.out.println(entry.getUser());
        System.out.println(presence.getType().name());
        System.out.println(presence.getStatus());
    }
    

    【讨论】:

    • 谢谢,但是我可以在线或离线确定状态,你可以清除这个吗?
    • 我做了相同的代码,但每个用户只是简单地给出“不可用”状态,当有 4-5 个已经可用时,它会如何,但是显示所有都不可用,谁能帮我解决这个问题?跨度>
    • 这里也一样。我只是得到状态不可用:/
    • 'xmppConnection.getRoster()' 没有提供更新的名册条目。对此有任何想法吗?
    【解决方案2】:

    使用presence.getMode() 方法获取用户模式。 模式为枚举,其值可以是聊天、可用、离开、xa、dnd。

    【讨论】:

      【解决方案3】:
      Presence presence = roster.getPresence("tom@jabber.org");
      if (presence.getType() == Presence.Type.AVAILABLE) {
         // Tom is online...
      }
      

      来自this link的参考

      【讨论】:

      • 我需要问几个关于 xmpp 的问题,我可以在列表视图中获取我的花名册朋友现在我只想在列表视图中显示在线用户请您指导我的方式是什么
      【解决方案4】:
          XMPPConnection.addConnectionCreationListener(new ConnectionCreationListener() {
      
              @Override
              public void connectionCreated(Connection arg0) {
                  Log.i(TAG, "receive xmpp connection : " + arg0);
                  connection = arg0;
                  roster = arg0.getRoster();
      
                  Collection<RosterEntry> entries = roster.getEntries();
                  Presence presence;
      
                  Log.e(TAG, "user count" + entries.size());
      
                  for (RosterEntry entry : entries) {
                      presence = roster.getPresence(entry.getUser());
      
                      Log.i(TAG, "" + entry.getUser());
                      Log.i(TAG, "" + presence.getType().name());
                      Log.i(TAG, "" + presence.getStatus());
                  }
      
              }
          });
      

      所以在您的程序开始时注册 XMPPConnection 监听器,通常需要几秒钟来接收连接对象。 但是只有当你只使用 creatEntry 时它才会起作用,只有在这种情况下 rooster 才能看到那些创建的用户。

      要使用名册创建条目,请使用下一个代码:

      try {
          rooster.createEntry("name", "user_id", null);
      } catch (XMPPException e) {
          e.printStackTrace();
      }
      

      我没有使用任何组,并且成功在第二台设备上看到用户。

      【讨论】:

        【解决方案5】:
        smackAndroid = SmackAndroid.init(this);
        XMPPConnection.addConnectionCreationListener(new ConnectionCreationListener() {
        
            @Override
            public void connectionCreated(XMPPConnection connection) {
        
                  Log.i("hello", "receive xmpp connection : " + connection);
                  roster = connection.getRoster();
        
                  try {
                      roster.createEntry("2868254", "hello", null);
                  } catch (XMPPException e) {
                      e.printStackTrace();
                  } catch (NotLoggedInException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  } catch (NoResponseException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  } catch (NotConnectedException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
              }
        });
        

        【讨论】:

        • 您能对此添加一些解释吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-11
        • 1970-01-01
        • 1970-01-01
        • 2016-01-18
        相关资源
        最近更新 更多