【问题标题】:How to remove listener from Firebase Realtime Database如何从 Firebase 实时数据库中删除监听器
【发布时间】:2017-11-07 13:54:28
【问题描述】:

为了从 Firebase 实时数据库接收数据,我需要注册监听器:

objectReference.addValueEventListener(valueEventListener);

删除(注销)此侦听器的正确方法是什么?

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    删除监听器的正确方法是使用这行代码根据活动的生命周期将其删除:

    databaseReference.removeEventListener(valueEventListener);
    

    请注意,如果您在onStart 中添加了侦听器,则必须在onStop 中删除它。如果您在onResume 中添加了侦听器,则必须在onPause 中删除它。如果您在onCreate 中添加了监听器,则必须在onDestroy 中删除它。

    但请记住,onDestroy 并不总是被调用。

    【讨论】:

    • 好的,谢谢。我有点困惑,因为添加和删除函数的名称不一致。
    • 您可以在此处查看有关活动生命周期的信息:以及根据您的需要何时添加和销毁:stackoverflow.com/a/61299029/3904109
    【解决方案2】:

    最好检查listener是否为null或有对象,因为如果listener对象为null会出现运行时错误

    if(valueEventListener!=null){
      databaseReference.removeEventListener(valueEventListener);
    }
    

    【讨论】:

    • 你应该在哪里调用它。我是 Android 新手,想知道是否应该使用 onDestroy 方法!?
    • 这取决于代码。就我而言,我在 Activity 中的 onBackPressed 覆盖方法中将其删除。或者onDestroy()也可以
    • 又是新人,我可以把它放在这两种方法中吗?我忘记了android有后退按钮,我是iPhone用户。
    • 是的,你应该试试
    【解决方案3】:

    你也可以这样做:

      componentWillUnmount() {
        firebase.database().ref('example').child(this.state.somethingDyamic).off('value');
      };
    
      doSomething() {
        firebase.database().ref('example').child(this.state.somethingDyamic).on('value', (snapshot) => {
          ...
       });
      }
    

    【讨论】:

    • 如果组件生命周期中状态发生变化怎么办?然后一个不同的孩子将被解开..
    猜你喜欢
    • 1970-01-01
    • 2016-09-20
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多