代码之家  ›  专栏  ›  技术社区  ›  Christopher Mills

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

  •  1
  • Christopher Mills  · 技术社区  · 8 年前

    关于在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 回复  |  直到 8 年前
        1
  •  1
  •   Niraj Niroula    8 年前

    看看这个 Documentation

    public class DatabaseReference extends Query  
    

    这意味着类中的每个方法 Query 也继承给类 DatabaseReference .

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

    不,除非参考文献没有不同,否则它们是相同的。

    在哪里使用 查询 然后

    查询 类通常用于过滤结果,如果您有多个查询要做。
    看见 this FirebaseRecyclerAdapter 需要并且只接受 查询 类而不是 数据库参考