【发布时间】: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