How i can delete firestore listener?

Viewed 39

I set the listener if isNeedToListen = true, otherwise I remove it, but it still works and I have set listeners that contradict each other when I enter the same chat room from different accounts

override fun listenMessage(
    receiver_id: String,
    user_id: String,
    messages: MutableLiveData<ArrayList<Message>>,
    onSuccess: (ArrayList<Message>) -> Unit,
    isNeedToListen:Boolean
) {
    var listenUserMessage: ListenerRegistration? =  null
    var listenReceiverMessage: ListenerRegistration? =  null
    if(isNeedToListen){
        listenUserMessage = database
            .collection(KEY_COLLECTION_USERS)
            .document(user_id)
            .collection(KEY_COLLECTION_CHAT)
            .addSnapshotListener { value, error -> ...
            }

        listenReceiverMessage = database
            .collection(KEY_COLLECTION_USERS)
            .document(receiver_id)
            .collection(KEY_COLLECTION_CHAT)
            .addSnapshotListener { value, error ->...
            }
    }else{
        if(listenUserMessage !=null){
            listenUserMessage.remove()
        }
        if(listenReceiverMessage !=null){
            listenReceiverMessage.remove()
        }
    }

}

UPD isNeedToListen coming from

firebaseRepostory.listenMessage(receiver_id, user_id, messages, onSuccess,false)

this code is executed onStop()

firebaseRepostory.listenMessage(receiver_id, user_id, messages, onSuccess,true)

this code is executed onStart()

1 Answers

Declaring a global listener would solve this problem. For more information refer this StackOverflow Thread shared by @AlexMamo.

Related