2
votes

I'm using Smack to build simple XMPP android client, I need to retrieve users only starts with letter "a" I've tried to use roster and UserSearchManager both need specific user id I couldn't use wild card for e.g.

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

or

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

Any help?

2

2 Answers

0
votes

This is a working snippet:

    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;
    }

So you have to use UserSearch,

on each column (like Username, pay attention to case!)

you have to set if search (true) or to not search (false)

your search string (in your usecase: "a*")

0
votes

Don't use smack version 4.4.0 alpha1 it has some bugs. After reverting it to 4.1.1 . I got all the users. from UserSearchManager