2016-12-15 4 views
8

Firebase DBノードに子ノードがないかどうかを確認するにはどうすればよいですか?データを取得する唯一の方法はリスナーがいると思われ、何かが追加または削除されたときにのみ起動します。言い換えれば、子供がいなければ、何も起こりません。Firebase DB:ノードに子がないかどうかを確認しますか?

+0

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

答えて

4

addValueEventListenerを使用できます。onDataChangeでは、子供がいないことを確認する方法があります。
リスナーが接続されている場合、このdocs

この方法をarcodingが一度トリガーされるので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) { 
    } 
}); 
+0

特定のノードに子供が多すぎる場合はどうなりますか?このアプローチは実行中に高価になります。 –

2

あなたがチェックすることができます変更しますchildFirebaseに存在するかどうかは、getChildrenCount()またはexists()の方法を使用してDataSnapshotとなります。

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を参照してください。これがあなたに役立つことを願っています

関連する問題