【发布时间】:2021-06-01 15:36:04
【问题描述】:
我有一个获取附近用户的 geofire 查询。一切正常,但如果pagingCounter 达到一定限制,我想停止收听新事件。我在onKeyEntered() 方法中添加了geoQuery.removeAllListeners(),但这并没有删除监听器。事件仍在发生,onKeyEntered() 方法不断被调用,直到它读取 DB 中的所有元素。
请帮助我找出我做错了什么。提前致谢!
var pagingCounter = 0
val geoQuery = geoFire.queryAtLocation(GeoLocation(mainUserLatitude, mainUserLongitude), distanceInKm)
geoQuery.addGeoQueryEventListener(object : GeoQueryEventListener {
override fun onGeoQueryReady() {
for ((key, value) in nearByUsersKeysTreeMap) {
val singleUserDatabaseReference = database.child(Constants.users).child(key)
singleUserDatabaseReference.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
}
override fun onDataChange(dataSnapshot: DataSnapshot) {
}
})
}
}
override fun onKeyEntered(key: String?, location: GeoLocation?) {
pagingCounter++
if (pagingCounter >= 100) {
geoQuery.removeAllListeners()
}
}
override fun onKeyMoved(key: String?, location: GeoLocation?) {
}
override fun onKeyExited(key: String?) {
}
override fun onGeoQueryError(error: DatabaseError?) {
}
})
【问题讨论】:
标签: android firebase kotlin firebase-realtime-database geofire