【问题标题】:Smack - get entry starts with specific letterSmack - 获取条目以特定字母开头
【发布时间】:2018-01-02 20:45:52
【问题描述】:

我正在使用 Smack 构建简单的 XMPP android 客户端,我只需要检索以字母“a”开头的用户我尝试使用名册和 UserSearchManager 都需要特定的用户 id 我不能使用通配符,例如

UserSearch userSearch = new UserSearch();
answerForm.setAnswer("user", "a*");

RosterEntry entry = roster.getEntry("a*");

有什么帮助吗?

【问题讨论】:

    标签: xmpp ejabberd smack


    【解决方案1】:

    这是一个有效的 sn-p:

        public static List<Row> searchOnServerForUsers(String searchString, XmppManager xmppManager) throws Exception
            {
                UserSearchManager usersearchManager = new UserSearchManager(abstractXMPPConnection.getConnection());
    
                String searchServiceName = XmppConstants.USER_SERVICE_NAME_PREFIX + abstractXMPPConnection.getConnection().getServiceName();
    
    
                Form form = usersearchManager.getSearchForm( searchServiceName );
    
                Form answers = form.createAnswerForm();
                answers.setAnswer("Name", false);
                answers.setAnswer("Email", false);
                answers.setAnswer("Username", true);
      //        answers.setAnswer("search", "*");  //search for all registered users
    answers.setAnswer("search", "a*");  //your search string
    
                ReportedData data = usersearchManager.getSearchResults(answers, searchServiceName);
    
                List<Row> rows = data.getRows();
    
                return rows;
        }
    

    所以你必须使用UserSearch

    在每一列上(如Username,注意大小写!)

    您必须设置是否搜索 (true) 或不搜索 (false)

    您的 search 字符串(在您的用例中:“a*”)

    【讨论】:

    • 我猜这与 Openfire 一起使用,我使用的是 ejabberd
    • 它是 openfire,但规格相同。检查调试什么是表单键,99% 你会发现相当于“搜索”键
    【解决方案2】:

    不要使用 smack 版本 4.4.0 alpha1,它有一些错误。将其还原为 4.1.1 后。我得到了所有的用户。来自用户搜索管理器

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      • 1970-01-01
      • 2019-07-17
      • 2014-11-03
      • 2017-04-13
      • 1970-01-01
      • 2018-03-15
      相关资源
      最近更新 更多