Java 如何知道Firebase列表是否无效?

Java 如何知道Firebase列表是否无效?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我使用文档后面的ChildEventListener。在数据加载过程中,我只是在listview中显示一个可绘制的进度 如果列表不是空的,则我隐藏/空进度视图 如果列表无效,我将显示“无项目” 使用ref.addValueEventListener我们只需检查datasnapshot是否为空即可知道它 你怎么知道名单是空的?可能吗?如果不先使用addValueEventListener?进行检查,您只能通过附加ValueEventListener来知道列表中没有项目 ref.addValu

我使用文档后面的ChildEventListener。在数据加载过程中,我只是在listview中显示一个可绘制的进度

  • 如果列表不是空的,则我隐藏/空进度视图
  • 如果列表无效,我将显示“无项目”

使用
ref.addValueEventListener
我们只需检查
datasnapshot
是否为空即可知道它


你怎么知道名单是空的?可能吗?如果不先使用
addValueEventListener

进行检查,您只能通过附加ValueEventListener来知道列表中没有项目

ref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        if (!snapshot.hasChildren()) {
            System.out.println("List is empty");
        }
    }
    @Override
    public void onCancelled(FirebaseError error) {
    }
}

但请记住,通常如果调用
addChildEventListener()
,最终会将项目存储在一些内部存储器中,例如
列表
。您还可以简单地检查内部存储是否为空(在触发
onChildRemoved()
之后),并在那里打印消息。

您正在查找
DataSnapshot.haschilds()
?文档说“指示此快照是否有任何子项”。我的用法与删除项的情况不太一样,但在添加侦听器之前,如果路径中有或没有内容,我不知道会有更多内容。在空列表的情况下,这是可以的,但是对于1000个对象的列表,我将通过添加addEventValueListener下载一次对象拉,然后通过addChildEventListener下载第二次。效率不高。同一查询或引用上的
ChildEventListener
ValueEventListener
将同时下载相同的数据。唯一的区别在于它们触发的事件/回调。如果您不想下载数据以查看是否存在任何内容,请考虑在JSON树中添加一个单独的<代码>数据DAT/<代码>节点,当您首次添加节点时,将其设置为<代码> Trase。
ref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        if (!snapshot.hasChildren()) {
            System.out.println("List is empty");
        }
    }
    @Override
    public void onCancelled(FirebaseError error) {
    }
}