2016-12-29 51 views
1

我有这样的标准火力地堡电话:火力地堡ValueEventListener返回不存在的关键

ref.child("user/toys/-K2873267832") 
    .addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot != null) { 
      // wow the Data at Firebase database does not exist 
     } 
    } 
} 

的问题是,裁判"user/toys/-K2873267832"不存在。当我在console.firebase.google.com上删除密钥时,dataSnapshot应该没有数据权限。即使是钥匙user/toys也被删除。

我一直在为这个项目工作一个月,并且在复杂的数据库中有很多ValueEventListener。这是我以前从未见过的东西。

什么会导致这种情况发生?

+0

那么dataSnapshot不等于null? – Lyla

+0

,DataSnapshot {key = -K2873267832,value = null} –

+0

查看答案已发布;你会得到该位置的价值,但这是预期的。也预计它不会有价值。如果您试图检查某个位置是否存在,则可以这样做 - 使用值事件侦听器,然后查看数据是否为空。 您也可以在父节点上执行调用,并使用'hasChild'方法查看它是否存在,如[此处]所述(http://stackoverflow.com/questions/37397205/google-firebase-check-if-儿童存在)。 – Lyla

回答

2

作为每this post

甲ValueEventListener将带有空值,如果没有值 存在的位置处被调用。所以如果你也叫 addListenerForSingleValueEvent(),你可以检测到该位置有 没有值。

然后他说dataSnapshot.getValue()应该等于null。因此,当有效的dataSnapshot将被返回时,该快照的值将为空。

+0

因此,dataSnapshot为空的情况永远不会发生? –

+0

谢谢我现在明白了 –