我正在使用asmack库来开发whatsapp风格的聊天应用程序,我能够连接和创建帐户,我想实现whatsapp的“添加聊天”功能,在这个功能中,我们从一个电话号码列表中选择好友,这些电话号码是registered.For this,我想在服务器上搜索我在手机中拥有的号码,然后在我点击这些号码后将它们添加到我的名册中。我可以轻松地在ejabberd 2.11服务器上登录和注册用户。但我无法从其中检索已注册用户的列表。我使用这段代码进行搜索:
UserSearchManager search = new UserSearchManager(conn);
try {
Form searchForm = search.getSearchForm("search."+conn.getServiceName());
Form answerForm = searchForm.createAnswerForm();
answerForm.setAnswer("Username",true);
answerForm.setAnswer("search",user);
System.out.println("search form");
ReportedData data = search.getSearchResults(answerForm,"search."+conn.getServiceName());这在我的ejabberd2服务器的OPENFIRE ejabberd2上非常有效。我不得不将它修改为:
UserSearchManager search = new UserSearchManager(conn);
try {
Form searchForm = search.getSearchForm("vjud."+conn.getServiceName());
Form answerForm = searchForm.createAnswerForm();
answerForm.setAnswer("user",username);//passed my jid in username i.e example@mydomain
System.out.println("search form");
ReportedData data = search.getSearchResults(answerForm,"vjud."+conn.getServiceName());
if(!data.getRows().isEmpty())
{
List<Row> hue = data.getRows();Iterator<Row> it=hue.iterator();
while(it.hasNext())
{
Row row = it.next();
List<String> hue2 = row.getValues("jid");Iterator<String> iterator=hue2.iterator();
if(iterator.hasNext())
{
String value = iterator.next().toString();
System.out.println(value);
}
}
}
else{
System.out.println("its null");
}上面的代码总是返回一个空的form.So,我应该在answerForm.setAnswer()中为ejabberd传递什么参数?请看“answerForm.setAnswer”(“用户名”,真);answerForm.setAnswer(“搜索”,用户);“为openfire工作。但是ejabberd没有布尔型用户名field..so,我应该传递什么呢?
发布于 2014-11-03 09:25:14
这个问题的解决方案不是使用任何用户搜索,而是实现与包含userids的数据库的直接连接。这是如何做到的:
我希望这能解决你的问题。
https://stackoverflow.com/questions/25821384
复制相似问题