Firebase数据库:如何检查节点是否没有子节点?

8
我如何查找 Firebase 数据库节点是否没有子节点?似乎唯一获取数据的方式是使用监听器,它们只在添加或删除时触发。换句话说,如果没有子节点,则不会触发任何内容。

https://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot.html#hasChildren() - OneCricketeer
2个回答

4
你可以使用 addValueEventListener 方法,在 onDataChange 中,你需要检查是否存在子节点。根据这份文档addValueEventListener 方法会在监听器被附加时触发一次,并且每当数据(包括子节点)发生变化时都会再次触发。
ref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        // As cricket_007 we also can use hasChildren or getChildrenCount
        if(!snapshot.hasChildren()){
            // db has no children
        }

        // OR this way
        if(snapshot.getChildrenCount() == 0){
            // db has no children
        }

        // OR this way
        for (DataSnapshot postSnapshot : snapshot.getChildren()) {
            // db has no children
        }
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {
    }
});

1
如果特定节点有太多的子节点,那该怎么办?在执行时,这种方法会变得过于昂贵。 - Oleksii K.

2
你可以使用 DataSnapshotgetChildrenCount()exists() 方法来检查 Firebase 中是否存在 child
 searchFirebaseRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

        Log.d("FIREBASE",String.valueOf(dataSnapshot.getChildrenCount()));
        String childrenCount = String.valueOf(datasnapshot.getChildrenCount());

       if(childrenCount != null){

          }else{

          //No childrens in Firebase Database
       }

//OR 

       if(!dataSnapshot.exists()){

          //No data   

         }


      }
        @Override
        public void onCancelled(DatabaseError databaseError) {


        }

    });

请查看此文档以获取更多信息。希望这能帮到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接