2017-10-06 45 views
0

我已經設置了火力地堡數據庫我的應用程序&它看起來像這樣:無法檢測是否dataSnapshot是在「addChildEventListener空或不是()`

app 
-category 
    -subCategory 
    -subSubCategory 

我有一個addChildEventListener()設置是這樣的:

mDatabase.child("category").addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      if (dataSnapshot != null) { 

      } else { 
       Log.d("dataSnapshot", "null"); 
      } 
     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

我想表明警報用戶當數據庫是空的,所以我想它通過刪除數據庫中的一切,那麼它看起來像這樣:

app: null 

但即使現在條件行Log.d("dataSnapshot", "null");沒有被調用。

編輯:

我加

mDatabase.child("category").addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       if (dataSnapshot != null) { 
        Log.d("dataSnapshot", "AVAILABLE"); 
       } else { 
        Log.d("dataSnapshot", "NULL"); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

,我得到了D/dataSnapshot: AVAILABLE打印出來。如果數據庫中沒有數據,這怎麼可能?

爲什麼會發生這種情況,以及當數據庫爲空時,如何顯示用戶警報?

+0

https://stackoverflow.com/questions/38551013/android-firebase-retrieve-data-from-child-node –

+0

@NirmalVaghasiya這是你指的是? –

回答

1

dataSnapshot對象本身永遠不會是null。但您可以通過致電dataSnapshot.exists()詢問是否有任何數據。所以:

public void onDataChange(DataSnapshot dataSnapshot) { 
    if (dataSnapshot.exists()) { 
     Log.d("dataSnapshot", "AVAILABLE"); 
    } else { 
     Log.d("dataSnapshot", "NO DATA"); 
    } 
} 
+0

我試過'dataSnapshot.getValue()== null',它工作。感謝您指出。 –

+2

爲什麼不像我在答案中那樣使用'dataSnapshot.exists()'? –