2017-10-15 137 views
2

我想從firebase數據庫中獲取一個簡單的數字。我有一個名爲「追隨者」的數據庫,它的結構像這樣...Firebase數據庫空對象引用

followers: { 
    {userID}: { 
     count: 5, 
     users: { {userID}: true, ... } 
    }, 
    ... 
} 

簡單的權利。所以,我想獲得「count」對象,並避免在「userID」不存在時引用空對象。所以,我有一個非常簡單的(或至少我認爲這是)設置爲...

DatabaseReference followersDB = FirebaseDatabase.getInstance().getReference("followers").child(user.getUid()).child("count"); 
followersDB.addListenerForSingleValueEven(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if(dataSnapshot != null) { 
      int followersCount = dataSnapshot.getValue(Integer.class); 
      //put value in view; 
     } else { 
      //put 0 in view 
     } 
    } 
}); 

人們會認爲,「如果(dataSnapshot!= NULL)」將從得到一個空值參考停止,但是當我跑我在模擬器我得到應用......

顯示java.lang.NullPointerException:嘗試在空對象引用調用虛擬方法詮釋 java.lang.Integer.intValue()'

爲什麼它仍然給我一個空對象引用nce如果我正在測試「if(dataSnapshot!= null)」?有沒有任何可能的方法來檢查,看看它的價值是否在分配之前?我認爲如果就足夠了,但顯然不是。感謝您的時間和幫助。

+0

你從來沒有通過'null'爲'DataSnapshot '參數。要檢查值是否存在,請使用'dataSnapshot.exists()'。 –

回答

3

這樣來做:

DatabaseReference followersDB = FirebaseDatabase.getInstance().getReference("followers").child(user.getUid()); 
    followersDB.addListenerForSingleValueEven(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if(dataSnapshot.child("users").exists()) { 
       int followersCount = dataSnapshot.child("count").getValue(Integer.class); 
       //put value in view; 
      } else { 
       //put 0 in view 
      } 
     } 
    }); 

此代碼意味着,如果您有任何的追隨者,然後去檢查你的追隨者數量