检查一个节点中每个孩子是否存在的最佳方法是什么?

时间:2018-03-10 19:04:23

标签: android firebase firebase-realtime-database

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) {

    }
});

这段代码效果很好,但是很长,所以我要求最好的方法来编写它?

我想首先检查阻止节点是否有子等于我的UID 如果是,那么我想检查我的UID 如果为true,则子项等于特定UID ,然后我想获取此示例中 0 的块值

我该怎么做?非常感谢你。

2 个答案:

答案 0 :(得分:2)

只需遍历使用child指定的路径。如果路径不存在,您将不会获得任何数据。

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
}

答案 1 :(得分:1)

试试这个:

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) {
  }
});

这将检查第一个uid if(dataSnapshot.exist())之后它将检查uid节点是否具有您提供的第二个uid if(dataSnapshot.hasChild(seconduid){然后您将迭代并获取节点{{1 }}