Как получить объект из Firebase только после завершения предыдущего объекта? - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть список, который заполнен идентификаторами пользователей, например:

List<String> userIds = new ArrayList<>();

Теперь я хочу перебрать этот список и получить все соответствующие объекты пользователя из базы данных Firebase. Это мой код:

for (String uid : userIds) {
    usersRef.child(uid).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            User user = dataSnapshot.getValue(User.class);

            //Create another listener?
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {}
    });
}

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

Как я могу получить следующий объект пользователя только после завершения предыдущего? Я следовал за комментарием Фрэнка ван Пуффелена из его ответа в этом сообщении , но я не могу выполнить эту задачу. Спасибо !!!

1 Ответ

0 голосов
/ 13 ноября 2018

Чтобы загрузить их последовательно, просто удалите идентификаторы, которые вы получили из списка.

Примерно так:

public void getNextUser() {
  if (list.size() > 0) {
    String uid = list.get(0)
    list.remove(0);
    usersRef.child(uid).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            User user = dataSnapshot.getValue(User.class);

            getNextUser()
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) { throw databaseError.toException(); }
    });
  }
}

И затем начните с:

getNextUser();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...