【问题标题】:what is difference between addListenerForSingleValueEvent and addChildEventListener methods of Firebase?Firebase 的 addListenerForSingleValueEvent 和 addChildEventListener 方法有什么区别?
【发布时间】:2016-04-13 13:12:45
【问题描述】:

我正在处理 firebase 数据库查询。但是,当他们在那里写addChildEventListener() 听众的onChildAdded() 时,阅读文档时会感到困惑,每次添加孩子时都会调用。

我的场景是我想查询所有孩子。应该使用上述方法还是使用addListenerForSingleValueEvent

正如他们在文档中提到的那样,监听器应该像 ref.removeEventListener(originalListener) 一样分离

  1. 这是什么意思?
  2. 在db中添加新数据时会一次又一次地调用吗?

【问题讨论】:

  • 我强烈建议您尝试一下,而不是在这里要求澄清文档。为每个(addChildEventListener()addListenerForSingleValueEvent())创建一个 sn-p,然后将一些项目添加到您的数据库中,看看会发生什么。如果不这样做,我们只会为您重新整理文档。如果您得到的行为仍然没有意义,请发布您的代码 sn-p 以及您期望它执行的操作。
  • 感谢您的宝贵建议.. 我肯定会尽快使用这两种方法进行比较,目前我使用的是 addListenerForSingleValueEvent(),这比 addChildEventListener() 了解一点。再次感谢你。将很快更新我的问题。 :)

标签: android firebase firebase-realtime-database


【解决方案1】:

两者都是一样的,这取决于你将如何使用它。我个人认为 ChildEventListener 使用起来更灵活,因为您可以定义对发生的操作(例如添加、更改或删除孩子时)要做什么。基于documentations,唯一的区别是 ValueEventListener 将执行您定义的关于发生的更改(添加、更改或删除)的“事情”,因为它只有一个侦听器OnDataChange() .同时 ChildEventListener 有 4 个监听器,onChildAdded()onChildChanged()onChildRemoved()onChildMoved(),因此您可以定义在每个监听器/动作中要做什么。

至于removeEventListener(),这是必要的,因为firebase 是反应式的,并且firebase 会主动监听给定节点(数据库引用)发生的情况。因此,当您删除侦听器时,它将不会侦听给定节点,因此在 removeEventListener() 之后所做的任何更改都不会被 firebase 识别。是的,ChildEventListenerValueEventListener 都会在每次添加新数据时始终主动监听并执行定义的操作(onDataChange()onChildAdded()

CMIIW 并原谅我的英语。 问候,

RM

【讨论】:

    猜你喜欢
    • 2021-05-10
    • 2017-05-25
    • 2016-12-12
    • 2015-04-24
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    相关资源
    最近更新 更多