我正在尝试在for循环中下载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();
答案 0 :(得分:0)
无法强制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();
}
});
}