2016-12-15 102 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欲瞭解更多信息。我希望這可以幫助你。