如何在Firebase中获取所有孩子的数据并将其显示到我的Android应用中?

时间:2018-07-14 09:53:16

标签: java android firebase firebase-realtime-database

我在Firebase实时数据库中具有此结构:

enter image description here

我该如何计算数据并将其显示在我的应用中,我应该使用哪个侦听器来获取所有孩子?

4 个答案:

答案 0 :(得分:1)

有几种方法可以实现此目的。 我使用以下方式:

    FirebaseDatabase.getInstance()
                    .getReference()
                    .child("demografi")
                    .addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            for (DataSnapshot dataSnap : dataSnapshot.getChildren()) {
                                YourObject object = dataSnap.getValue(YourObject.class);

                                // Use your object as needed
                            }

                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });  

dataSnapshot返回所引用的子级。一旦拥有了它,您所要做的就是遍历它们,您可以根据需要访问“所有孩子”。

答案 1 :(得分:0)

FirebaseDatabase.getInstance()
        .getReference()
        .child("demografi")
        .addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {

                    /** Qty of data in demografi, this is what you want. */
                    long Count = dataSnapshot.getChildrenCount();

                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

如果要实时监视数据计数,

您必须将[addListenerForSingleValueEvent]替换为[addValueEventListener]。

答案 2 :(得分:0)

我会喜欢这种方式-

String email, gender, nama;
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("demografi");

databaseReference.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        // To get children count
        dataSnapshot.getChildrenCount();

        email = dataSnapshot.child("email").getValue().toString();
        gender = dataSnapshot.child("gender").getValue().toString();
        nama = dataSnapshot.child("nama").getValue().toString();
        // and so on..
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s){
    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {
    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
    }
});

答案 3 :(得分:0)

如果没有模型类,则可以简单地使用String类。因此,要获取所有孩子的数据,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference demografiRef = rootRef.child("demografi");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String nama = ds.child("nama").getValue(String.class);
            Log.d("TAG", nama);
        }
        Log.d("TAG", String.valueOf(dataSnapshot.getChildrenCount()));
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
demografiRef.addListenerForSingleValueEvent(valueEventListener);

logcat中的输出将是所有用户的所有名称。如您所见,第二条日志语句将打印您的孩子总数。