3

Smackライブラリを使用してIMアプリケーションを開発していますが、いくつかの問題が発生しています。

サーバー内のユーザー名でユーザーの存在を確認できるかどうか知りたいのですが。私のアプリケーションは、システムの連絡先リストのユーザーが私のサーバーでアカウントを開いていて、友達リストに含まれていないかどうかを確認する必要があります。

これまでのところ、システムの連絡先リストにあるすべての連絡先を、サーバーのユーザーの連絡先リストに追加することができました。ユーザーが事前にアカウントを持っていなくても、それは私が探しているものではありません。

コードは次のとおりです(ContactはSmackのRosterEntryのラッパークラスのようなものです):

public void addAllContactsIfExisting(Contact[] contactsAgenda) {

    for (Contact contact: contactsAgenda) {
        if (!isContactMyFriend(contact)) {
            try {
                // I'd like to check for account existence here, being contact.getJid() the username as it'd be in the server
                conn.getRoster().createEntry(contact.getJid(), contact.getName(), null);
            } catch (XMPPException e) {
                e.printStackTrace();
            }
        }
    }
}

それが役に立ったら、私は現在サーバーとしてOpenfireを使用しています。

4

2 に答える 2

2

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

于 2011-05-05T04:15:16.643 に答える
0

ユーザーを検索するためにこのスニペットを試すことができます:

public Boolean checkIfUserExists(String user) throws XMPPException{
    UserSearchManager search = new UserSearchManager(xmppConnection);  
    Form searchForm = search.getSearchForm("search."+xmppConnection.getServiceName());
    Form answerForm = searchForm.createAnswerForm();  
    answerForm.setAnswer("Username", true);  
    answerForm.setAnswer("search", user);  
    ReportedData data = search.getSearchResults(answerForm,"search."+xmppConnection.getServiceName());  
    if (data.getRows() != null) {
        Iterator<Row> it = data.getRows();
        while (it.hasNext()) {
            Row row = it.next();
            Iterator iterator = row.getValues("jid");
            if (iterator.hasNext()) {
                String value = iterator.next().toString();
                System.out.println("Iteartor values...... " + value);
            }
        }
        return true;
    }
    return false;
}
于 2014-08-28T10:21:03.897 に答える