2016-12-15 98 views
8

如何确定Firebase数据库节点是否没有子女?似乎获取数据的唯一方法是使用侦听器,并且只有在添加或删除某些内容时才会触发。换句话说,如果没有孩子,什么都不会发生。Firebase DB:检查节点是否没有孩子?

+0

https://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot.html#hasChildren() –

回答

4

您可以使用addValueEventListener,并在onDataChange您将有一些方法来检查没有孩子。
addValueEventListener会工作,因为arcoding此docs

这种方法时,侦听器附加触发一次又一次 每一个数据,包括儿童时间,改变

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

如果特定节点的孩子太多,该怎么办?这种方法在执行时会过于昂贵。 –

2

您可以检查child是否存在于Firebase中或者通过使用DataSnapshotgetChildrenCount()exists()方法存在。

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


     } 

    }); 

看到这个doc欲了解更多信息。我希望这可以帮助你。