Я использую GeoFirestore GeoQueryDataEventListener
.
В данный момент я тестирую на 2 устройствах. User1
выполняет поиск, чтобы увидеть, есть ли поблизости другие документы с GeoQuery - если документов не существует, создается новый документ. Затем User2
выполнит поиск и найдет документ пользователя 1.
Проблема в том, что когда 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 - Следующий документ с yRFjKHEyGXclKcS
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: yRFjKHEyGXclKcS | fromCache: true
Оба документа, очевидно, были из кэша, хотя один из них находился на сервере.
Все, что я хочу, это выполнить GeoQuery
(GeoQueryDataEventListener
), который возвращает действующие документы (без кэша). Если это невозможно, я бы с удовольствием отфильтровал на основе documentSnapshot.metadata.isFromCache
- но даже это невозможно, потому что иногда он говорит, что документ из кеша, хотя это не так.
Любой совет приветствуется.
Редактировать: Если я получаю документ из onDocumentEntered()
- он обычно из кэша с первого раза. Затем, если я выполню GeoQuery.removeAllListeners()
, а затем снова, тот же документ будет извлечен, но не из кэша. В этом видео говорится, что я должен получить второй обратный вызов с сервера, если я подключен к Интернету - однако мне нужно запросить базу данных в отдельном вызове. Мне нужен документ, полученный с сервера (не из кэша) с первой попытки. Как мне этого добиться?