В моем приложении я использую базу данных Firebase. Есть вопросы и соответствующие комментарии, хранящиеся в отдельных узлах. Теперь я пытаюсь получить вопросы от одного слушателя и получить доступ к комментариям со вторым слушателем. К сожалению, меня смущает их поведение: recyclerView
всегда получает пустой questionsList
, как будто второй слушатель пропускается. Но после того, как recyclerView
получил список и настроил адаптер, мой LogCat начинает печатать вопросы и информацию о комментариях.
Но почему recyclerView
заполняется и используется до завершения цикла for, который обрабатывает данные?
Метод получения информации:
private void getQuestionsFromDatabase() {
mQuestions.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
questionList = new ArrayList<>();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
final String title = dataSnapshot1.child("title").getValue().toString();
final String question = dataSnapshot1.child("question").getValue().toString();
final String commentId = dataSnapshot1.child("commentId").getValue().toString();
mComments.child(commentId).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
count = dataSnapshot.getChildrenCount();
QuestionModel questionModel = new QuestionModel(title, question, commentId, String.valueOf(count));
questionList.add(questionModel);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
Log.d("questionList length: ", String.valueOf(questionList.size()));
recyclerViewAdapter = new RecyclerViewQuestionAdapter(questionList, getActivity());
recyclerViewlayoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(recyclerViewlayoutManager);
recyclerView.setAdapter(recyclerViewAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}