【问题标题】:Firebase ValueEventListener return non existing keyFirebase ValueEventListener 返回不存在的键
【发布时间】:2017-05-14 02:06:11
【问题描述】:

我有这个标准的 Firebase 调用:

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。这是我以前从未见过的。

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

【问题讨论】:

  • 所以dataSnapshot不等于null?
  • 没错,DataSnapshot { key =-K2873267832, value = null }
  • 查看发布的答案;您会获得该位置的值,但这是意料之中的。还预计它不会有任何价值。如果您尝试检查某个位置是否存在,这就是您的做法 - 使用值事件侦听器,然后查看数据是否为空。您也可以在父节点上进行调用,并使用hasChild 方法查看它是否存在,如here 所述。

标签: android firebase firebase-realtime-database


【解决方案1】:

根据this post

如果没有值,将使用空值调用 ValueEventListener 存在于某个位置。所以如果你也打电话 addListenerForSingleValueEvent(),可以检测到该位置有 没有价值。

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

【讨论】:

  • 那么永远不会出现dataSnapshot为null的情况?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 2011-07-29
相关资源
最近更新 更多