如何在Firebase for Android中获取根节点的子节点

时间:2017-07-30 14:55:32

标签: android firebase firebase-realtime-database

我有以下树结构

[1]

我需要单独获取名称和详细信息以及他们的孩子。

我已经这样做了,但是在执行时没有运行并关闭应用程序:

info = FirebaseDatabase.getInstance().getReference();
        info.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot infoSnapshot: dataSnapshot.getChildren()) {
                    Log.i(TAG, infoSnapshot.child(info.toString()).getValue(String.class));
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.i(TAG, "onCancelled", databaseError.toException());
            }
        });

如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

要从根节点获取数据,请使用以下代码:

info = FirebaseDatabase.getInstance().getReference();
info.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot ds : dataSnapshot.getChildren()) {
            String child = ds.getKey();
            Log.d("TAG", child);
        }

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.i(TAG, "onCancelled", databaseError.toException());
    }
});

输出将是:

details
name

答案 1 :(得分:0)

删除此行无用:

mDatabase= FirebaseDatabase.getInstance().getReference();

并将此更改为

info = FirebaseDatabase.getInstance().getReference(mDatabase.toString());

info = FirebaseDatabase.getInstance().getReference();

也是这样:

Log.i(TAG, infoSnapshot.child("root").getValue(String.class));// the root node doesn't exists 

答案 2 :(得分:0)

获得数据快照后,您可以轻松迭代收到的所有数据..

info = FirebaseDatabase.getInstance().getReference();
    info.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot infoSnapshot:dataSnapshot.child("details").getChildren()) {
                Log.i(TAG, infoSnapshot.getValue(String.class));
            }
            for(DataSnapshot infoSnapshot:dataSnapshot.child("name").getChildren()){
                Log.i(TAG, infoSnapshot.getValue(String.class));
            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.i(TAG, "onCancelled", databaseError.toException());
        }
    });