首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索ejabberd服务器上的注册用户总是返回空表单(Asmack)

问搜索ejabberd服务器上的注册用户总是返回空表单(Asmack)
EN

Stack Overflow用户
提问于 2014-09-13 08:35:47
回答 1查看 776关注 0票数 1

我正在使用asmack库来开发whatsapp风格的聊天应用程序,我能够连接和创建帐户,我想实现whatsapp的“添加聊天”功能,在这个功能中,我们从一个电话号码列表中选择好友,这些电话号码是registered.For this,我想在服务器上搜索我在手机中拥有的号码,然后在我点击这些号码后将它们添加到我的名册中。我可以轻松地在ejabberd 2.11服务器上登录和注册用户。但我无法从其中检索已注册用户的列表。我使用这段代码进行搜索:

代码语言:javascript
复制
     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上非常有效。我不得不将它修改为:

代码语言:javascript
复制
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,我应该传递什么呢?

EN

回答 1

Stack Overflow用户

发布于 2014-11-03 09:25:14

这个问题的解决方案不是使用任何用户搜索,而是实现与包含userids的数据库的直接连接。这是如何做到的:

  1. 对于openfire,有一个连接到mysql数据库的选项。安装mysql并连接数据库。
  2. 当用户创建帐户时,它将在您链接的数据库中列出。
  3. 现在实际的搜索部分将使用php,因为android不能直接连接mysql。
  4. 在服务器pc上,安装wamp服务器。创建一个php脚本,该脚本查询从请求它的客户端获得的用户it值(从客户端您可以对所有移动号码进行php发布,将其与服务器db上的数字进行比较,然后向客户端发回现有号码列表。

我希望这能解决你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25821384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档