Retrieving list of users in my Android App through Parse that match my Phone Contact List

隐身守侯 提交于 2019-12-04 17:10:00

You can use a OR query:

public void getFriends(List<String> numbers) {
    List<ParseQuery<ParseUser>> queries = new ArrayList<ParseQuery<ParseUser>>();
    for (String number : numbers) {
        ParseQuery<ParseUser> parseQuery = ParseUser.getQuery();
        parseQuery.whereEqualTo("PhoneNumber", number);
        queries.add(parseQuery);
    }

    ParseQuery<ParseUser> userQuery = ParseQuery.or(queries);

    userQuery.findInBackground(new FindCallback<ParseUser>() {

        @Override
        public void done(List<ParseUser> numberList, ParseException e) {
            if (e == null) {
                for (int i = 0; i < numberList.size(); i++) {
                    // What to do here?

                    //Use this list of ParseUser (numberList) in an ArrayAdapter
                    //or save it in a database
                }
            }
        }
    });
}

List<String> numbers would be the list of phone numbers from the user's addressbook.

Once you have the List<ParseUser> just feed it to an ArrayAdapter<ParseUser> or save it in a local database, your choise (I'd go with the database).

There is limitation that or query have. If your numbers list is longer than 10 elements it will be thrown Too many $or clauses exception. So you need to modify David's code little bit. If you have for example 80 elements in your numbers list, code will look like

public void getFriends(List<String> numbers) {

    for (int i = 0; i < 80; i += 10) {

        List<ParseQuery<ParseUser>> queries = new ArrayList<>();
        for (int j = i; j < i + 10; j++) {
            ParseQuery<ParseUser> parseQuery = ParseUser.getQuery();
            parseQuery.whereEqualTo("PhoneNumber", numbers.get(j));
            queries.add(parseQuery);
        }

        ParseQuery<ParseUser> userQuery = ParseQuery.or(queries);

        userQuery.findInBackground(new FindCallback<ParseUser>() {

            @Override
            public void done(List<ParseUser> numberList, ParseException e) {

                if (e == null) {
                    for (int i = 0; i < numberList.size(); i++) {
                        // What to do here?

                        Log.e(TAG, numberList.get(i).getUsername());
                    }
                } else {
                    Log.e(TAG, e.getMessage());
                }
            }
        });

    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!