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