如何在Smack XMPP服务器中为UsersearchManager添加搜索服务



环境:

  • 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();
    }
}

XMPP服务器中没有任何默认搜索服务吗?我必须单独安装搜索服务吗?我搜索了,但找不到Smack的任何搜索插件。很高兴听到您的解决方案/想法。预先感谢。

我也开发了相同的功能,但我使用vcard将serach用户而不是搜索manager。

首先,需要在名册中添加所有联系人,并使用VCARD可以获取或设置用户avatar,获取设置用户在线,存储用户状态,例如WhatsApp等,使用JID et et

这是我的代码搜索用户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);
}

用户程序是一个模型类,其中包含以下值的吊袜带setter

private String nickname;
private String jid;
private String status;
private byte[] avatar;

getnickname((:

public String getNickname(String jid) throws SmackInvocationException {
        VCard vCard = vCardHelper.loadVCard(jid);
        return vCard.getNickName();
    }

loadVcard((:

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 doInBackground

放入任务
try {
    UserProfile user = SmackHelper.getInstance(context).search(username);
    if (user != null) {
        if (user.getUserName().equals(PreferenceUtils.getUser(context))) {
            user.setType(UserProfile.TYPE_MYSELF);
        } else {
            Cursor c = context.getContentResolver().query(ContactTable.CONTENT_URI, new String[]{ContactTable._ID},
                    ContactTable.COLUMN_NAME_JID + " = ?", new String[] {user.getJid()}, null);
            if (c.moveToFirst()) {
                user.setType(UserProfile.TYPE_CONTACT);
            } else {
                user.setType(UserProfile.TYPE_NOT_CONTACT);
            }
        }
    }
    return Response.success(user);
} catch(SmackInvocationException e) {
     Log.e(String.format("search user error %s", e.toString()), e);
    return Response.error(e);
}

相关内容

  • 没有找到相关文章

最新更新