Android xmpp查询用户(模糊查询)
2019-09-24 10:12
106 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014714188/article/details/101267847
Android xmpp查询用户(模糊查询)
此处以smack:4.3.4版本为例,介绍直接根据用户名通过xmpp模糊查询用户。
我们先来看看查询的效果
查询的方法实现
本例用的smack:4.3.4版本,getSearchForm和getSearchResults方法传的是DomainBareJid类型,而之前的版本是String类型,大家在使用的时候需要特别注意,而转换DomainBareJid的方式如下面的例子所示:JidCreate.domainBareFrom(“search.” + getConnection().getXMPPServiceDomain())。
/** * 查询用户 * * @param userName userName * @return List<HashMap < String, String>> */ public List<UserInfo> searchUsers(String userName) { if (getConnection() == null) { return null; } UserInfo user; //自定义的用户实体类 List<UserInfo> userInfos = new ArrayList<>(); try { UserSearchManager usm = new UserSearchManager(getConnection()); //本例用的smack:4.3.4版本,getSearchForm方法传的是DomainBareJid类型,而之前的版本是String类型,大家在使用的时候需要特别注意 //而转换DomainBareJid的方式如下面的例子所示:JidCreate.domainBareFrom("search." + getConnection().getXMPPServiceDomain()) Form searchForm = usm.getSearchForm(JidCreate.domainBareFrom("search." + getConnection().getXMPPServiceDomain())); if (searchForm == null) { return null; } //这里设置了Username为true代码是根据用户名查询用户,search代表查询字段 //smack:4.3.4版本是下面的字段,但之前的版本会有些不一样,所以在用的时候最好看下xmpp交互的log,里面有相应的字段值 Form answerForm = searchForm.createAnswerForm(); answerForm.setAnswer("Username", true); answerForm.setAnswer("search", userName); ReportedData data = usm.getSearchResults(answerForm, JidCreate.domainBareFrom("search." + getConnection().getXMPPServiceDomain())); List<ReportedData.Row> rowList = data.getRows(); //此处返回的字段名如下所示,之前的版本可能有所变化,使用的时候需要注意 for (ReportedData.Row row : rowList) { user = new UserInfo(); String jid = row.getValues("jid").toString(); String username = row.getValues("Username").toString(); String name = row.getValues("Name").toString(); String email = row.getValues("Email").toString(); user.setJid(jid.substring(jid.indexOf("[")+1,jid.indexOf("]"))); user.setUserName(username.substring(username.indexOf("[")+1,username.indexOf("]"))); user.setNickName(name.substring(name.indexOf("[")+1,name.indexOf("]"))); user.setEmail(email.substring(email.indexOf("[")+1,email.indexOf("]"))); userInfos.add(user); // 若存在,则有返回,UserName一定非空,其他两个若是有设,一定非空 } } catch (SmackException | InterruptedException | XmppStringprepException | XMPPException e) { e.printStackTrace(); } return userInfos; }
最后需要特别注意
如果用上面的方法还是查不到数据,并且看log,xmpp之间的交互也没有报任何错误,那就需要看看你自己安装配置的openfire的search插件是否有安装。如下图所示。
相关文章推荐
- Android XMPP 查询用户
- c#.net用户登录、注册和模糊查询源代码
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android实战简易教程-第二十四枪(基于Baas的用户表查询功能实现!)
- Android基于XMPP Smack Openfire下学习开发IM(三)会议室创建、加入以及查询会议室中所有成员等
- XMPPFramework中用户对象查询
- 06Mybatis_入门程序——根据用户的名字模糊查询返回List集合
- Android基于XMPP Smack Openfire下学习开发IM(三)会议室创建、加入以及查询会议室中所有成员等
- android中用XMPP Asmack获取用户朋友的presence(名单列表)的实现
- 简单排序,单一删除,隔行换色,模糊查询,添加用户
- Android 搜索框的实时查询/模糊查询
- 模糊查询全部删除添加用户
- android query 模糊查询
- 遇到拼接SQL 模糊查询 用户输入特殊符号出现的错误
- Android关键字模糊查询,并带有高亮效果
- android模糊查询
- 使用cardinality去重查询不同厂商的用户数(精确查询和模糊查询)
- Android实战简易教程-第二十四枪(基于Baas的用户表查询功能实现!)
- android 用户定位和地图查询