Firebase-在for循环中同步获取Firebase数据吗?

时间:2019-03-23 09:46:14

标签: java firebase asynchronous firebase-realtime-database

我正在尝试在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();

1 个答案:

答案 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();
        }
    });
}