Получение списка пользователей в моем приложении для 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());
}
}
});
}
}