如何从Firebase数据库中的节点检索所有对象?

时间:2016-10-11 16:01:23

标签: android firebase firebase-realtime-database

我遵循了文档,但无论如何,我都无法弄清楚如何从单个节点返回所有对象。例如,我想从companies节点返回所有公司对象的列表。一旦我有了这个列表,我想将它们全部解析为JSON对象。这是我第一次使用NoSQL数据库,所以我确信我错过了一些小的东西。

目前我有:

DatabaseReference companiesRef = FirebaseDatabase.getInstance().getReference("12265");

    companiesRef.child("companies").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            Log.d("Count ", dataSnapshot.getChildren().toString());
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

但它只返回null的{​​{1}}。

这是我的数据库:

2 个答案:

答案 0 :(得分:1)

您可以像这样创建参考:

FirebaseDatabase.getInstance().getReference("12265");

这意味着Firebase会查看数据库的根目录,并从那里返回子12265。它不会自动在树中搜索具有匹配名称的节点。

所以你需要指定整个路径:

FirebaseDatabase.getInstance().getReference("android/users/12265");

答案 1 :(得分:0)

不要向getReference()添加任何参数(让它转到数据库的根目录),然后设置addListenerForSingleValueEvent。并且您还没有在数据快照上使用getvalue()。试试这段代码:

DatabaseReference companiesRef =  FirebaseDatabase.getInstance().getReference();

// this is the patch that I see from the image that you have attached.
companiesRef.child("telenotes").child("android").child("user").child("12265").child("companies").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        Log.d("Count ", dataSnapshot.getChildren().getValue().toString());
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});