Smack - 获取条目以特定字母开头
Posted
技术标签:
【中文标题】Smack - 获取条目以特定字母开头【英文标题】:Smack - get entry starts with specific letter 【发布时间】:2018-01-02 20:45:52 【问题描述】:我正在使用 Smack 构建简单的 XMPP android 客户端,我只需要检索以字母“a”开头的用户我尝试使用名册和 UserSearchManager 都需要特定的用户 id 我不能使用通配符,例如
UserSearch userSearch = new UserSearch();
answerForm.setAnswer("user", "a*");
或
RosterEntry entry = roster.getEntry("a*");
有什么帮助吗?
【问题讨论】:
【参考方案1】:这是一个有效的 sn-p:
public static List<Row> searchOnServerForUsers(String searchString, XmppManager xmppManager) throws Exception
UserSearchManager usersearchManager = new UserSearchManager(abstractXMPPConnection.getConnection());
String searchServiceName = XmppConstants.USER_SERVICE_NAME_PREFIX + abstractXMPPConnection.getConnection().getServiceName();
Form form = usersearchManager.getSearchForm( searchServiceName );
Form answers = form.createAnswerForm();
answers.setAnswer("Name", false);
answers.setAnswer("Email", false);
answers.setAnswer("Username", true);
// answers.setAnswer("search", "*"); //search for all registered users
answers.setAnswer("search", "a*"); //your search string
ReportedData data = usersearchManager.getSearchResults(answers, searchServiceName);
List<Row> rows = data.getRows();
return rows;
所以你必须使用UserSearch
,
在每一列上(如Username
,注意大小写!)
您必须设置是否搜索 (true
) 或不搜索 (false
)
您的 search
字符串(在您的用例中:“a*
”)
【讨论】:
我猜这与 Openfire 一起使用,我使用的是 ejabberd 它是 openfire,但规格相同。检查调试什么是表单键,99% 你会发现相当于“搜索”键【参考方案2】:不要使用 smack 版本 4.4.0 alpha1,它有一些错误。将其还原为 4.1.1 后。我得到了所有的用户。来自用户搜索管理器
【讨论】:
以上是关于Smack - 获取条目以特定字母开头的主要内容,如果未能解决你的问题,请参考以下文章