当前位置: 首页 > 知识库问答 >
问题:

查找Firebase上的childEventListener是否已完成加载所有数据

张成济
2023-03-14

我正在使用Firebase实时数据库为我的Android应用程序存储和检索数据。在我的活动中,我使用ChildEventListener从Firebase检索所有数据(例如:用户数据列表)。

我想显示一个进度条,只要数据没有完全从数据库中检索出来。如何检查是否全部检索到了所有数据,以便在加载数据后关闭进度条?

共有1个答案

祁聪
2023-03-14

当Firebase在给定位置同步初始数据时,有一种常见的检测方法。这种方法利用了Firebase事件保证之一:

值事件总是最后触发的,并且保证包含在该快照拍摄之前发生的任何其他事件的更新。

因此,如果在给定位置上同时有ValueEventListenerChildEventListener,则保证在所有OnChildAdded()调用之后调用ValueEventListener.OnDataChange()。您可以使用这一点来了解初始数据加载何时完成:

ref.addListenerForSingleValueEvent(new ValueEventListener() {
    public void onDataChange(DataSnapshot dataSnapshot) {
        System.out.println("We're done loading the initial "+dataSnapshot.getChildrenCount()+" items");
    }
    public void onCancelled(FirebaseError firebaseError) { }
});
ref.addChildEventListener(new ChildEventListener() {
    public void onChildAdded(DataSnapshot dataSnapshot, String previousKey) {
        System.out.println("Add "+dataSnapshot.getKey()+" to UI after "+previousKey);
    }
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
    }
    public void onChildRemoved(DataSnapshot dataSnapshot) {
    }
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {
    }
    public void onCancelled(FirebaseError firebaseError) { }
});
Add -K2WLjgH0es40OGWp6Ln to UI after null
Add -K2YyDkM4lUotI12OnOs to UI after -K2WLjgH0es40OGWp6Ln
Add -K2YyG4ScQMuRDoFogA9 to UI after -K2YyDkM4lUotI12OnOs
...
Add -K4BPqs_cdj5SwARoluP to UI after -K4A0zkyITWOrxI9-2On
Add -K4BaozoJDUsDP_X2sUu to UI after -K4BPqs_cdj5SwARoluP
Add -K4uCQDYR0k05Xqyj6jI to UI after -K4BaozoJDUsDP_X2sUu
We're done loading the initial 121 items
 类似资料:
  • 所以我想知道,我想看看一个表是否已经被懒/急加载了,而没有在我检查时实际加载它。例如: 所以当我设置($this)时-

  • 问题内容: 我有ConcurrentLinkedDeque,它用于同步push / pop元素,还有一些异步任务,这些任务正在从堆栈中获取一个元素,如果该元素具有邻居,则会将其推入堆栈。 示例代码: 我想在while循环中有另外一条语句来回答问题-“执行程序中的任何任务都在工作?” 问题答案: 如果使用,没有一种干净的方法来检查所有Runnable是否都已完成。除非您在Runnable本身中构建了

  • 如何在包含回收器视图的活动开始时显示Progressbar,一旦回收器视图从firebase数据库加载数据,应该隐藏该视图? 在onCreate方法中,我显示了我的ProgressBar,但我不知道什么时候应该隐藏它。 你们能给我点主意吗?谢谢

  • 问题内容: 检测下载是否完成的最佳方法是什么,因为此后我想更新数据库。 我尝试了PHP手册中的一些代码,但对我来说并没有多大作用: 问题答案: 但这并不能真正告诉您用户是否已完成下载。当 您 完成向用户发送字节后,它将告诉您,但它并没有说明用户实际收到了多少字节。 实际上,PHP(服务器端而非客户端语言)无法真正检测文件下载何时完成。最好的办法是在下载开始时将下载记录在数据库中。如果您绝对,完全和

  • 问题内容: 所以我试图通过用户的电子邮件获取用户的密钥,问题是我不知道自己的代码中查询是否确实找到了什么..所以我假设我是否在onchildadd中,查询成功了,已经找到一个孩子,所以我会将密钥传递给另一个活动并停止当前活动,但是当我运行该应用程序时,整个代码都将被执行..我觉得我的方式有点不对劲,但是我没有找到任何方法来知道是否查询成功或找到一个孩子....如果您有任何想法请帮助… 输出:如果找

  • 我正在编写一个在运行时将卡片(JPanel)添加到CardLayout的应用程序。问题是卡上的一些组件加载速度比其他组件快,使其看起来有问题,并且在显示之前没有正确渲染。 我希望它在第一次展示时准备好。 我通过加载屏幕暂时解决了这个问题,它使线程Hibernate1500毫秒。有没有更有效的方法来知道面板上的所有内容是否都已加载?