Islam Ahmed
Islam Ahmed

Reputation: 736

What is the best way to check the existence of every child in one node?

FirebaseDatabase.getInstance().getReference("Block").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot snap : dataSnapshot.getChildren()) {
            if(snap.getKey().equals(myUID)){
                FirebaseDatabase.getInstance().getReference("Block").child(myUID).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot snap : dataSnapshot.getChildren()) {
                            if(snap.getKey().equals(list.get(position).getUid())){
                                FirebaseDatabase.getInstance().getReference("Block").child(myUID).child(list.get(position).getUid()).addValueEventListener(new ValueEventListener() {
                                    @Override
                                    public void onDataChange(DataSnapshot dataSnapshot) {
                                        for (DataSnapshot snap : dataSnapshot.getChildren()) {
                                            if(snap.getValue().equals("1")){
                                               call_method();
                                            }else{

                                              //code...
                                            }
                                        }
                                    }

                                    @Override
                                    public void onCancelled(DatabaseError databaseError) {

                                    }
                                });

                            } else {
                               call_method();
                            }
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
            } else {
               call_method();
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

This code works well, but it is very long so I am asking for the best way to write it ?

I want to check firstly if Block node has child equals to my UID if it is true then I want to check if my UID has child equals to specific UID if it is true then I want to get the value of block which is 0 in this example

How can I do that ? Thank you very much.

Upvotes: 0

Views: 93

Answers (2)

Reaz Murshed
Reaz Murshed

Reputation: 24211

Just traverse to the path specified using child. You will get no data if the path doesn't exist.

FirebaseDatabase.getInstance().getReference("Block")
    .child("MyUUID")
    .child("specificUUID")
    .addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()) {
                // ... Do something
            } else {
                call_method();
            }
       // ... Other code
}

Upvotes: 2

Peter Haddad
Peter Haddad

Reputation: 80914

Try this:

Firebaseuser user=FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Block");
ref.child(user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
       if(dataSnapshot.exist()){
          //checks first uid
           if(dataSnapshot.hasChild(seconduid){
               //checks if seconduid is there
                 for(DataSnapshot datas:dataSnapshot.getChildren()){
                      String blocks=datas.child("block").getValue().toString();

          }
      }

   }  

}

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

This will check the first uid if(dataSnapshot.exist()) after that it will check if that uid node has the second uid that you provide if(dataSnapshot.hasChild(seconduid){ then you will iterate and get the node block

Upvotes: 1

Related Questions