Firebase删除ValueEventListener不会删除侦听器

时间:2019-05-04 17:13:28

标签: android firebase firebase-realtime-database kotlin

我对Firebase实时数据库有2个侦听器:连接侦听器和数据侦听器。我用关键字val全局声明了这些变量,并在init{}块中初始化了它们。话虽如此,不应该进行更改。因此,同样在我的init块中,我将Connection侦听器附加到DatabaseReference。如果设备连接到Firebase,它将调用一种方法来附加数据侦听器。

那是什么问题?
从理论上讲,侦听器保持不变,因此我可以附加它们并删除任何问题。但是问题是,一旦将侦听器附加到引用,我便无法再将其删除-换句话说,从参考数据中删除侦听器之后,仍会获取。

代码:

附加侦听器的Firebase类:

private val REFERENCE = "reference"

private var mDatabase: FirebaseDatabase? = null
private val mDataReference: DatabaseReference
private val mValueChangedListener: ValueEventListener

private var mModelChanged: onModelChanged? = null

init {
    if (mDatabase == null) {
        mDatabase = FirebaseDatabase.getInstance()
    }
    mDataReference = mDatabase!!.getReference(REFERENCE)

    /**
     * Listener listening for data changes
     */

    mValueChangedListener = object : ValueEventListener {
        override fun onDataChange(p0: DataSnapshot) {
            mModelChanged?.onDataSetChanged(p0)
        }

        override fun onCancelled(p0: DatabaseError) {
            mModelChanged?.onConnectionChanged(false)
            Log.e("Database error", p0.code.toString())
        }
    }
}

fun attachListener(){
    mDataReference.addValueEventListener(mValueChangedListener)
    Log.d("Attach listener", "attached")
}

fun detachListener(){
    mDataReference.removeEventListener(mValueChangedListener)
    Log.d("Detach listener", "detached")

}

从上面的类中调用attachListener()或detachListener()的存储库,它还建立了一个接口onModelChanged

fun attachAdapter(){
    mModel.attachListener()
}

fun detachAdapter(){
    mModel.detachListener()
}

“活动”,它在onResume()onPause()中调用回购

override fun onResume() {
    super.onResume()
    mRepository.attachAdapter()
    Log.i("onResume", "called")
}


override fun onPause() {
    super.onPause()
    mRepository.detachAdapter()
    Log.i("onPause", "called")
}

我在做什么错?预先感谢!

0 个答案:

没有答案