【问题标题】:Firebase database null object referenceFirebase 数据库空对象引用
【发布时间】:2017-10-15 00:56:36
【问题描述】:

我正在尝试从 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 空对象引用上的 java.lang.Integer.intValue()'

如果我正在测试“if(dataSnapshot != null)”,为什么它仍然给我一个空对象引用?有没有办法在分配之前检查该值是否存在?我认为 if 就足够了,但显然不是。感谢您的时间和帮助。

【问题讨论】:

  • 您永远不会为 null 传递 DataSnapshot 参数。要检查值是否存在,请使用dataSnapshot.exists()

标签: java android firebase firebase-realtime-database


【解决方案1】:

这样做:

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

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

【讨论】:

    猜你喜欢
    • 2018-04-03
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    相关资源
    最近更新 更多