【问题标题】:Firebase - Get firebase data synchronously in for loop?Firebase - 在for循环中同步获取firebase数据?
【发布时间】:2026-02-05 10:45:01
【问题描述】:

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

【问题讨论】:

    标签: java firebase asynchronous firebase-realtime-database


    【解决方案1】:

    没有办法强制 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();
            }
        });
    }
    

    【讨论】: