java - Firebase 数据库空对象引用

标签 java android firebase firebase-realtime-database

我正在尝试从 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: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference

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

最佳答案

这样做:

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

此代码意味着如果您有关注者,请查看您的关注者数量

关于java - Firebase 数据库空对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46750731/

相关文章:

java - 创建具有字符串格式的 Java 字符串变量

android - LoopJ AndroidAsyncHttp 和持久性 cookie 存储

android - 在 Android 中通知用户新推文

firebase - 如何作为 Kotlin 中函数的结果从 Firestore 数据库返回列表?

android - Firebase 云消息传递 - 处理注销

java - 如何解决 'java.lang.OutOfMemoryError: GC overhead limit exceeded'

java - 谷歌对话流 : The Application Default Credentials are not available

java - 部署描述符和 Java 资源消失了

android - 通过具有自动解析功能的 Android 应用程序在 Facebook 上分享链接

android - 尝试从 Firebase 显示 ListView 时出现 java.lang.ArrayIndexOutOfBoundsException 错误