通过向查询添加侦听器返回的DataSnapshot是否与直接添加到DatabaseReference的侦听器不同

时间:2017-10-04 20:20:51

标签: android firebase firebase-realtime-database listener

这是一个广泛的问题,关于在不使用查询类的情况下运行Firebase数据查询与访问数据之间的区别。

以下是查询的结构,取自文档并稍微修剪一下:

DatabaseReference myRef = database.getReference("Users");

Query exampleQuery = myRef.orderByChild("age");

exampleQuery.addChildEventListener(new ChildEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {

            // Do something...

        }
    }
});

看着它并且读取那个必须在DataSnapshot上增加,让我想知道它是否与下面示例中的DataSnapshot不同,如果没有,将查询类视为仅仅是正确的在使用之前向数据添加排序和过滤的中介,因此在不使用查询类时添加for循环很好,如​​下例所示?

DatabaseReference myRef = database.getReference("Users");

myRef.addChildEventListener(new ChildEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {

            // Do something...

        }
    }
});

我意识到这个问题可能看起来微不足道,但我没有遇到过查询类没有使用for循环的例子,因此我想确认两者没有绑在一起。

1 个答案:

答案 0 :(得分:1)

看看这个Documentation。你会发现

public class DatabaseReference extends Query  

这意味着类Query的每个方法也都继承到类DatabaseReference

  

通过向查询添加侦听器返回的DataSnapshot是否与直接添加到DatabaseReference的侦听器不同?

不,它们是相同的,除非引用没有区别。

  

在哪里使用Query呢?

我相信Query类通常用于过滤结果,如果您有多个查询要做 另见thisFirebaseRecyclerAdapter需要并且只接受Query类的实例,而不是DatabaseReference