Android 如何在smack XMPP服务器中为UserSearchManager添加搜索服务?
环境:Android 如何在smack XMPP服务器中为UserSearchManager添加搜索服务?,android,xmpp,chat,ejabberd,smack,Android,Xmpp,Chat,Ejabberd,Smack,环境: Ejabberd版本:16.04 Smack-android-4.1.0 我正在尝试创建一个聊天应用程序,该应用程序具有按姓名、年龄等搜索可用用户的功能。但是,当我使用下面的代码时,服务器上没有任何搜索服务 public void serachServiceList() { try { UserSearchManager searchManager = new UserSearchManager(connection); List<St
- Ejabberd版本:16.04
- Smack-android-4.1.0
public void serachServiceList() {
try {
UserSearchManager searchManager = new UserSearchManager(connection);
List<String> services = searchManager.getSearchServices();
if (services == null || services.size() < 1) {
System.out.println("No services");
} else {
for (String service : services) {
Log.e("SERVICE", service);
}
}
} catch (SmackException.NoResponseException | XMPPException.XMPPErrorException | SmackException.NotConnectedException e) {
e.printStackTrace();
}
}
public void SerachService列表(){
试一试{
UserSearchManager searchManager=新的UserSearchManager(连接);
List services=searchManager.getSearchServices();
if(services==null | | services.size()<1){
System.out.println(“无服务”);
}否则{
for(字符串服务:服务){
Log.e(“服务”,服务);
}
}
}catch(smakeException.NoResponseException | xmppeException.XMPPErrorException | smakeException.NotConnectedException e){
e、 printStackTrace();
}
}
XMPP服务器中没有默认的搜索服务吗?我必须单独安装搜索服务吗?我搜索了,但找不到smack的任何搜索插件。
很高兴听到您对此的解决方案/想法。
提前感谢。我也开发了相同的功能,但我使用VCard来搜索用户,而不是SearchManager 首先需要添加和使用vcard,您可以获取或设置用户头像,获取设置用户状态,存储用户状态,如whatsapp等,使用JID搜索用户 这是我的Vcard代码搜索用户 搜索用户():
public UserProfile search(String jid) throws SmackInvocationException {
if (vCardHelper == null) {
return null;
}
VCard vCard = vCardHelper.loadVCard(jid);
String nickname = vCard.getNickName();
return nickname == null ? null : new UserProfile(jid, vCard);
}
public String getNickname(String jid) throws SmackInvocationException {
VCard vCard = vCardHelper.loadVCard(jid);
return vCard.getNickName();
}
public VCard loadVCard(String jid) throws SmackInvocationException {
VCard vCard = new VCard();
try {
vCard.load(con, jid);
return vCard;
} catch (Exception e) {
throw new SmackInvocationException(e);
}
}
UserProfile是一个模型类,它包含以下带有garter setter的值
get昵称():
public UserProfile search(String jid) throws SmackInvocationException {
if (vCardHelper == null) {
return null;
}
VCard vCard = vCardHelper.loadVCard(jid);
String nickname = vCard.getNickName();
return nickname == null ? null : new UserProfile(jid, vCard);
}
public String getNickname(String jid) throws SmackInvocationException {
VCard vCard = vCardHelper.loadVCard(jid);
return vCard.getNickName();
}
public VCard loadVCard(String jid) throws SmackInvocationException {
VCard vCard = new VCard();
try {
vCard.load(con, jid);
return vCard;
} catch (Exception e) {
throw new SmackInvocationException(e);
}
}
loadVCard():
public UserProfile search(String jid) throws SmackInvocationException {
if (vCardHelper == null) {
return null;
}
VCard vCard = vCardHelper.loadVCard(jid);
String nickname = vCard.getNickName();
return nickname == null ? null : new UserProfile(jid, vCard);
}
public String getNickname(String jid) throws SmackInvocationException {
VCard vCard = vCardHelper.loadVCard(jid);
return vCard.getNickName();
}
public VCard loadVCard(String jid) throws SmackInvocationException {
VCard vCard = new VCard();
try {
vCard.load(con, jid);
return vCard;
} catch (Exception e) {
throw new SmackInvocationException(e);
}
}
下面是从服务器获取搜索用户列表的代码
-这里我看到了一个简单的例子,我创建了AsyncTask
this
任务放入doInBackground