【问题标题】:Android ADD FRIEND using SmackAndroid ADD FRIEND 使用 Smack
【发布时间】:2012-09-30 12:59:28
【问题描述】:

我不熟悉使用 smack 库和制作一个聊天应用程序。我已经做了很多,在这一步我想问两个问题。

  1. 当我添加朋友时,该朋友已添加到我的列表中,但没有任何通知发送给我添加的朋友,如何实现。我已经添加了下面的代码。

  2. 我想问的第二件事是如何检查我要添加的用户是否是应用程序的一部分或成员(意味着它是否在服务器上)。这样就不会将未注册到应用程序的用户添加到好友列表中。

这里是代码

public static boolean addFriend(String jid) {
            String nickname = null;
            nickname = StringUtils.parseBareAddress(jid);
            RosterEntry entry4 = roster.getEntry("samsad");
            if (!roster.contains(jid)) {
                try {
                    Presence subscribe = new Presence(Presence.Type.subscribe);
                    subscribe.setTo(jid);               
                    connection.sendPacket(subscribe);               
                    roster.createEntry(jid, nickname, null);
                      // Send a roster entry (any) to user2
                    RosterExchangeManager REM = new RosterExchangeManager(connection);
                    REM.send(entry4, jid);
                    return true;
                } catch (XMPPException e) {
                    System.err.println("Error in adding friend");
                    return false;
                }
            } else {
                return false;
            }
        }

名册交换管理器在后台运行在服务中

/**Remotr Exchange Manager*/
             RosterExchangeManager rem = new RosterExchangeManager(connection);
              // Create a RosterExchangeListener that will iterate over the received roster entries
              RosterExchangeListener rosterExchangeListener = new RosterExchangeListener() {
                  public void entriesReceived(String from, Iterator remoteRosterEntries) {
                      notification("Receive==4");
                      while (remoteRosterEntries.hasNext()) {
                          try {
                              // Get the received entry
                              RemoteRosterEntry remoteRosterEntry = (RemoteRosterEntry) remoteRosterEntries.next();
                              // Display the remote entry on the console
                              System.out.println(remoteRosterEntry);
                              // Add the entry to the user2's roster
                              roster.createEntry(
                                  remoteRosterEntry.getUser(),
                                  remoteRosterEntry.getName(),
                                  remoteRosterEntry.getGroupArrayNames());
                              notification("Receive==1");   
                          }
                          catch (XMPPException e) {
                              e.printStackTrace();
                          }
                      }
                  }
              };
              rem.addRosterListener(rosterExchangeListener);
        }
        else{
            showToast("Connection lost-",0);
        }
    }

【问题讨论】:

    标签: android smack livechat


    【解决方案1】:

    1,问题是你必须在连接服务器之前为Presence.Type.subscribe注册一个PacketListener。添加和接受朋友的所有过程我在here回答了

    2,您可以使用UserSearch 类搜索特定用户,如果在服务器上未找到该用户,则可以假设该用户未在服务器上注册。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2023-04-07
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多