Firebase数据库空对象引用

时间:2017-10-15 00:56:36

标签: java android firebase firebase-realtime-database

我想从firebase数据库中获取一个简单的数字。我有一个名为"追随者"的数据库。它的结构如此...

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

简单吧。所以,我想得到"计数"对象,并避免空对象引用时#34; 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
        }
    }
});

有人会认为" if(dataSnapshot!= null)"将停止获取空值引用,但当我在模拟器中运行我的应用程序时,我得到...

  

java.lang.NullPointerException:尝试调用虚方法' int   java.lang.Integer.intValue()'在空对象引用上

如果我正在测试" if(dataSnapshot!= null)&#34 ;?为什么它仍然给我一个空对象引用?在分配之前是否有任何可能的方法来检查值是否存在?我认为这样就足够了,但显然它不是。感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:4)

这样做:

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
            }
        }
    });

此代码表示如果您有任何关注者,请转到并查看关注者的数量