5

私はsmackライブラリを使用して1つのチャットアプリケーションを作成するのは初めてです。私はかなりの程度まで作りました、そしてこのステップで私は2つの質問をしたいと思います。

  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;
            }
        }

バックグラウンドでサービスで実行されている名簿Exchangeマネージャー

/**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);
        }
    }
4

1 に答える 1

1

Presence.Type.subscribe1、問題は、サーバーに接続する前に、PacketListenerを登録する必要があることです。私がここで答えた友達を追加して受け入れるすべてのプロセス

2、UserSearchクラスを使用して特定のユーザーを検索できます。サーバーでユーザーが見つからない場合は、ユーザーがサーバーに登録されていないと見なすことができます。

于 2012-10-31T04:43:24.297 に答える