我正在使用 Windows 上的 ejabberd-17.01 服务器开发基于 android 的聊天应用程序。为安卓使用 Smack 4.1。我想使用以下代码搜索用户
public void searchUser(){
try {
UserSearchManager userSearchManager = new UserSearchManager(connection);
Collection<String> services = userSearchManager.getSearchServices();
if(services.isEmpty()){
return;
}
Form searchForm = userSearchManager.getSearchForm(services.iterator().next());
Form answerForm = searchForm.createAnswerForm();
answerForm.setAnswer("Name", true);
answerForm.setAnswer("search", "test"); // here i'm passsing the Text value to search
ReportedData resultData;
resultData = userSearchManager.getSearchResults(answerForm, "search." + connection.getServiceName());
Iterator<ReportedData.Row> it = (Iterator)resultData.getRows();
ReportedData.Row row = null;
while (it.hasNext()) {
String value = it.next().toString();
Log.i("Iteartor values......", " " + value);
System.out.println("Jabber_id :" + row.getValues("jid").toString());
System.out.println("Name :" + row.getValues("Name").toString());
row = it.next();
}
}
catch (SmackException.NoResponseException | SmackException.NotConnectedException | XMPPException.XMPPErrorException | XmppStringprepException e){
Log.w("app" , e.toString());
}
}
我的问题是 userSearchManager.getSearchServices() 返回零值。我读到我应该通过在连接之前调用 SmackAndroid.init(context) 来为 android 初始化 smack,但是每当我写这个时它只说创建类 SmackAndroid(context) 并且不显示任何导入。
compile "org.igniterealtime.smack:smack-im:4.1.0"
compile "org.igniterealtime.smack:smack-android:4.1.0"
compile "org.igniterealtime.smack:smack-tcp:4.1.0"
compile "org.igniterealtime.smack:smack-extensions:4.1.0"
我还测试了 smack 文档中提到的所有依赖项,但找不到这种方法。我错过了什么,或者有什么其他方法可以在 ejabberd 中搜索注册用户。另外我想知道我是否需要将任何模块添加到 ejabberd 以进行搜索,例如在 openfire 服务器中手动添加搜索模块?