首页 > 解决方案 > 使用 smack#UserSearchManager 无法搜索用户

问题描述

我尝试使用 Smack#UserSearchManager 搜索用户。但它总是返回空的 ReportedData。我确定我搜索的用户是存在的。所以我使用 spark 搜索同一个用户。它是真实存在的。那是我的搜索代码。它在 smack 4.2.4 中使用。

DomainBareJid searchJID = JidCreate.domainBareFrom(Domainpart.from("search."+IMLib.getConn().getServiceName().asUnescapedString()));
UserSearchManager manager = new UserSearchManager(IMLib.getConn());
Form searchForm = manager.getSearchForm(searchJID);
Form answerForm = searchForm.createAnswerForm();
answerForm.setAnswer("Name", true);
answerForm.setAnswer("Username", true);
answerForm.setAnswer("Email", true);
answerForm.setAnswer("search", account);
ReportedData reportedData = manager.getSearchResults(answerForm, searchJID);
List<ReportedData.Row> rows = reportedData.getRows();

标签: openfiresmack

解决方案


考虑代码中的“帐户”必须是本地部分,例如 user1@domain/resource 中的“user1”。我的代码正在运行:

    UserSearchManager sm = new UserSearchManager(connection);
    DomainBareJid sDomain = JidCreate.domainBareFrom("search." + connection.getServiceName());
    Form form = sm.getSearchForm(sDomain).createAnswerForm();
    form.setAnswer("Username", true);
    form.setAnswer("search", _user_name); // _user_name is "user1"
    ReportedData reportedData = sm.getSearchResults(form, sDomain);

推荐阅读