移除Firebase侦听器不适用于Android
我将一个事件值侦听器添加到引用,当我想删除它,但它不起作用。
override fun onStart() { super.onStart() stateListener =dbReference.stateRef.addValueEventListener(object : ValueEventListener { override fun onCancelled(p0: DatabaseError?) { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } override fun onDataChange(snapshot: DataSnapshot?) { //there is my functions }) } override fun onStop() { super.onStop() dbReference.stateRef.removeEventListener(stateListener) Log.d("My_TAG", "$stateListener ") }
这是我添加活动的唯一地方。
编辑后(仍然不工作)
override fun onStart() { super.onStart() stateListener = object : ValueEventListener { override fun onCancelled(p0: DatabaseError?) { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } //One of the phone got flipped override fun onDataChange(snapshot: DataSnapshot?) { } } dbReference.stateRef.addValueEventListener(stateListener) } override fun onStop() { super.onStop() Log.d("Life", "onStop") dbReference.stateRef.removeEventListener(stateListener) }
为了移除侦听器,首先需要创建它,然后将其附加到DatabaseReference
对象。
val valueEventListener = ValueEventListener() { //override fun onDataChange //override fun onCancelled } dbReference.stateRef.addValueEventListener(eventListener)
所以要删除这个监听器,你需要按照你的活动的生命周期来做:
dbReference.stateRef.removeEventListener(valueEventListener);
- 如果您在
onStart
添加了监听器,则必须在onStop
中将其删除。 - 如果在
onResume
添加了监听器,则必须在onPause
中将其删除。 - 如果你已经在
onCreate
添加了监听器,你必须在onDestroy
移除它。
但请记住,并不总是调用onDestroy
。
addValueEventListener
不返回任何东西。 您只是匿名创建了侦听器。 因此,您的stateListener
不是指您的侦听器。
改变你的代码如下:
class YourClassName:Activity(){ private lateinit var statelistener: ValueEventListener override fun onStart() { stateListener = ValueEventListener { [...] } dbReference.stateRef.addValueEventListener(stateListener) } override fun onStop() { super.onStop() dbReference.stateRef.removeEventListener(stateListener) Log.d("My_TAG", "$stateListener ") } }
现在,您的取消订阅代码应该工作。 我对Kotlin不是很舒服,所以请原谅,但上面的代码应该工作。
- Firestore本地过滤
- Firebase:在Kotlin / Java中使用枚举字段的干净方式?
- 转换字节码时出错 – DexException – Firebase身份验证
- 为什么这个ChildEventListener不从Firebase节点读取数据?
- Google Firebase在Android应用中注销并忘记用户
- Android的Firebase身份验证同步登录
- 如何在Kotlin上使用Firebase UI数据库?
- Firebase Android – 在Kotlin中使用电子邮件和密码创建用户
- Firebase Perf不会运行测试应用程序:transformClassesWithFirebasePerformancePluginForDebugAndroidTest