HARSH ASHRA
HARSH ASHRA

Reputation: 316

Android - How to get child of child data in Firebase Database?

enter image description here

Hi, I am trying to access id inside Members. Here is something I tried but it shows me NullPointerException.

groupRefernce = FirebaseDatabase.getInstance().getReference("Groups");
    groupRefernce.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for (DataSnapshot dataSnapshot : snapshot.getChildren()){
                String id = dataSnapshot.child("Members/id").getValue().toString();
                List<String> groupMembers = new ArrayList<>();
                groupMembers.add(id);
                Log.d("groups", String.valueOf(groupMembers.size()));

            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });

So, what changes should I make?

Upvotes: 0

Views: 63

Answers (1)

Alex Mamo
Alex Mamo

Reputation: 139039

To get all the IDs inside the Members node, please use the following lines of code:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference groupsRef = rootRef.child("Groups");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot groupSnapshot : dataSnapshot.getChildren()) {
            for(DataSnapshot memberSnapshot : groupSnapshot.child("Members").getChildren()) {
                String id = memberSnapshot.child("id").getValue(String.class);
                Log.d("TAG", id);
            }
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
    }
};
groupsRef.addListenerForSingleValueEvent(valueEventListener);

The result in the logcat will be:

FzyF ... osn1
ILSH ... ZVG3
eBAZ ... zUE2

The key for solving this problem is to use to iterate your Groups node twice using a call to .getChildren() method.

Upvotes: 2

Related Questions