Получение списка пользователей в моем приложении для Android с помощью Parse, которые соответствуют моему списку контактов телефона

Я разрабатываю приложение для обмена сообщениями в чате Android, используя Parse, где я сохраняю номер телефона пользователя, имя пользователя и пароль во время процесса регистрации, который я успешно завершил. Теперь я хочу получить список пользователей, уже сохраненных в списке контактов телефона, соответствующих их телефонным номерам, и отобразить пользователей в виде списка. Я застрял в написании запроса Parse и отображении выбранных пользователей в виде списка.

РЕДАКТИРОВАТЬ: я пытаюсь поиграть в следующем коде, но пока не знаю.

ParseUser user1 = ParseUser.getCurrentUser();
ParseQuery<ParseUser> parseQuery = user1.getQuery();
parseQuery.whereEqualTo("PhoneNumber", some_ph_no_from_my_contact);
parseQuery.findInBackground(new FindCallback<ParseUser>() {

    @Override
    public void done(List<ParseUser> numberList, ParseException e) {
        // TODO Auto-generated method stub

        if(e == null){
            for (int i = 0; i < numberList.size(); i++) 
            {
                // What to do here?
            }
        }
        else{
            Log.d("userId", "Error: " + e.getMessage());
        }
    }
});

Пожалуйста помоги.

2 ответа

Решение

Вы можете использовать OR запрос:

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 будет список телефонных номеров из адресной книги пользователя.

Когда у вас есть List<ParseUser> просто накорми это ArrayAdapter<ParseUser> или сохранить его в локальной базе данных, на ваш выбор (я бы пошел с базой данных).

Существует ограничение, которое или запрос имеют. Если ваш список номеров длиннее 10 элементов, то будет выдано исключение "слишком много $" или "пункты". Так что вам нужно немного изменить код Дэвида. Если у вас есть, например, 80 элементов в списке номеров, код будет выглядеть так

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

    }
}
Другие вопросы по тегам