I'm adding an event value listener to a reference and when I want to remove it, but it doesn't work.
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 ")
}
This is the only place I'm adding the event.
after editing (still don't work)
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)
}
In order to remove a listener, you first need to create it and then attach it to a DatabaseReference object.
val valueEventListener = ValueEventListener() {
//override fun onDataChange
//override fun onCancelled
}
dbReference.stateRef.addValueEventListener(eventListener)
So to remove the listener, you need to do it accordingly to the life-cycle of your activity like this:
dbReference.stateRef.removeEventListener(valueEventListener);
onStart you have to remove it in onStop.onResume you have to remove it in onPause.onCreate you have to remove it in onDestroy.But remember onDestroy is not always called.
addValueEventListener doesn't return anything. You just created the listener anonymously. Therefore, your stateListener isn't referring to your listener.
Change your code as below:
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 ")
}
}
Now, your unsubscribe code should work. I am not very comfortable with Kotlin yet so pardon the syntax issues but the code above should work.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With