Firebase - Получить данные Firebase синхронно в течение цикла? - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь загрузить данные из firebase для цикла, а затем уведомить адаптер RecyclerView. Но поскольку firebase запускает асинхронную задачу. Я не могу этого сделать. Как заставить firebase работать синхронно или как узнать, все ли данные firebase загружены.

Пример кода:

for(int i=0;i<list.size();i++){
        FirebaseDatabase.getInstance().getReference().child(list.get(i)).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                Post post = dataSnapshot.getValue(Post.class);
            }

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

            }
        });
    }
    //When all data is downloaded
    adapter.notifyDataSetChanged();

1 Ответ

0 голосов
/ 23 марта 2019

Невозможно заставить Firebase синхронно читать данные.

Но если все, что вы хотите сделать, это знать, когда все данные были загружены, вы можете сохранить простой счетчик количества элементов, которыеуспешно загружено:

int completedCount = 0;
for(int i=0;i<list.size();i++){
    FirebaseDatabase.getInstance().getReference().child(list.get(i)).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            Post post = dataSnapshot.getValue(Post.class);
            completedCount = completedCount + 1;
            if (completedCount == list.size()) {
                adapter.notifyDataSetChanged();
            }
        }

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