我正在使用GeoFirestore的GeoQueryDataEventListener
。
目前,我正在使用2种设备进行测试。 User1
搜索以查看GeoQuery附近是否还有其他文档-如果不存在文档,则创建一个新文档。然后User2
将搜索并找到User1的文档。
问题在于,当User2
执行GeoQuery时,它通常会返回已被删除的文档。
我不想从缓存中检索文档。如果服务器上不存在该文档,则不希望它返回。我已在代码中关闭了缓存持久性:
val settings: FirebaseFirestoreSettings = FirebaseFirestoreSettings.Builder().setPersistenceEnabled(false).build()
val db by lazy { FirebaseFirestore.getInstance() }
db.firestoreSettings = settings
但是我的GeoQuery
仍然从缓存中返回文档。
话虽如此,大多数时候GeoFire
说文档来自缓存,但不是:
示例1 -以下具有z2sniJhKrWpZhX
ID的文档已删除。然后,我查询了数据库,并在onDocumentEntered
中返回了该文档:
nearbyUsers = geoFirestore.queryAtLocation(currentLocation, 1.0)
nearbyUsers.addGeoQueryDataEventListener(object : GeoQueryDataEventListener {
override fun onDocumentEntered(documentSnapshot: DocumentSnapshot, location: GeoPoint) {
Log.d(TAG, "onDocumentEntered: user1: ${documentSnapshot.getString("user1")} | docId: ${documentSnapshot.id} | fromCache: ${documentSnapshot.metadata.isFromCache}")
onDocumentEntered: user1: 6IXCuAzK76JWP7F3h414IShm1 | docId: z2sniJhKrWpZhX | fromCache: true
示例2 -未删除了以下ID为yRFjKHEyGXclKcS
的文档。然后,我查询了数据库,并在onDocumentEntered
中返回了该文档:
nearbyUsers = geoFirestore.queryAtLocation(currentLocation, 1.0)
nearbyUsers.addGeoQueryDataEventListener(object : GeoQueryDataEventListener {
override fun onDocumentEntered(documentSnapshot: DocumentSnapshot, location: GeoPoint) {
Log.d(TAG, "onDocumentEntered: user1: ${documentSnapshot.getString("user1")} | docId: ${documentSnapshot.id} | fromCache: ${documentSnapshot.metadata.isFromCache}")
onDocumentEntered: user1: 6IXCuAzK76JWP7F3h414IShm1 | docId: yRFjKHEyGXclKcS | fromCache: true
这两个文档显然都来自缓存,即使其中一个文档在服务器上也是如此。
我所要做的就是执行一个返回实时文档(无缓存)的GeoQuery
(GeoQueryDataEventListener
)。如果无法做到这一点,我很乐意根据documentSnapshot.metadata.isFromCache
进行过滤-但这是不可能的,因为有时它说文档来自缓存,即使不是。
任何建议都值得赞赏。
编辑:如果我从onDocumentEntered()
检索文档,通常是第一次从缓存中获取。然后,如果我执行GeoQuery.removeAllListeners()
,然后再次执行,将检索同一文档,但不会从缓存中检索。 In this video表示如果我已连接到Internet,则应该从服务器接收第二次回调-但是我必须在单独的调用中查询数据库。我需要在第一次尝试时从服务器(不是缓存)检索到的文档。我该如何实现?