Java Firebase数据库空对象引用

Java Firebase数据库空对象引用,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正试图从firebase数据库中获取一个简单的数字。我有一个叫做“追随者”的数据库,它的结构是这样的 followers: { {userID}: { count: 5, users: { {userID}: true, ... } }, ... } 简单对。因此,我希望获得“count”对象,并在“userID”不存在时避免空对象引用。所以我有一个非常简单(或者至少我认为是)的设置 DatabaseReference follower

我正试图从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
        }
    }
});
有人会认为“if(dataSnapshot!=null)”会停止获取空值引用,但当我在模拟器中运行我的应用程序时,我会

java.lang.NullPointerException:尝试调用虚拟方法“int” null对象引用上的java.lang.Integer.intValue()

如果我正在测试“if(dataSnapshot!=null)”,为什么它仍然给我一个null对象引用?在赋值之前,是否有任何可能的方法检查值是否存在?我以为如果足够了,但显然不够。感谢您的时间和帮助。

请这样做:

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

此代码意味着,如果您有任何追随者,请检查
DataSnapshot
参数的追随者数量

您从未通过
null
。要检查值是否存在,请使用
dataSnapshot.exists()