【问题标题】:What is the best way to check the existence of every child in one node?检查一个节点中每个孩子是否存在的最佳方法是什么?
【发布时间】:2018-08-19 03:46:01
【问题描述】:

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

    }
});

这段代码运行良好,但很长,所以我想问一下最好的写法?

我想首先检查 Block 节点是否有子节点等于 my UID 如果它是真的然后我想检查 my UID有孩子等于 特定的 UID 如果它是真的,那么我想获得块的值,在这个例子中是 0

我该怎么做?非常感谢。

【问题讨论】:

标签: java android firebase firebase-realtime-database


【解决方案1】:

只需遍历使用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
}

【讨论】:

  • 谢谢,但是这段代码中的问题是当孩子不存在时我想调用一个方法call_method();,我该如何调用它?
  • 很高兴知道这有帮助!答案也会根据您的建议进行编辑。谢谢。
【解决方案2】:

试试这个:

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){ 然后您将迭代并获取节点 block

【讨论】:

  • 感谢您的帮助.. 我看到 Reaz Murshed 的回答更简单
  • 是的,我给出的答案就是你在问题中要求的,但是很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 2011-05-25
  • 2012-08-29
  • 2010-09-18
  • 2012-06-17
相关资源
最近更新 更多