Firestore все еще извлекает документы из кеша, хотя я отключил сохранение

Мой Firestore все еще извлекает документы из кеша, хотя я прямо сказал ему не делать этого:

class MainActivity : AppCompatActivity() {

    val db = FirebaseFirestore.getInstance()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val dbSettings = FirebaseFirestoreSettings.Builder().setPersistenceEnabled(false).build()
        db.firestoreSettings = dbSettings

Выше моя активность запуска, где я устанавливаю настройки Firestore.

В моем фрагменте я выполняю GeoFirestore GeoQuery:

class MapFragment : Fragment() {
    val instances = FirebaseFirestore.getInstance().collection("instances")
    val geoFirestore = GeoFirestore(instances)
    lateinit var nearbyDocs: GeoQuery

    private fun searchNearby(){
        nearbyDocs = geoFirestore.queryAtLocation(currentLocation, 1.0)
        nearbyDocs.addGeoQueryDataEventListener(object : GeoQueryDataEventListener {

            override fun onDocumentEntered(documentSnapshot: DocumentSnapshot, location: GeoPoint) {
               Log.d(TAG, "onDocumentEntered: user1: ${documentSnapshot.getString("user1")?.substring(0, 3)} | docId: ${documentSnapshot.id.substring(0, 5)} | fromCache: ${documentSnapshot.metadata.isFromCache}")
               Log.d(TAG, "isPersistanceEnabled2: ${db.firestoreSettings.isPersistenceEnabled}")
            }
    }

Вот что он регистрирует:

onDocumentEntered: user1: 0X6 | docId: lPLFf | fromCache: true
isPersistanceEnabled2: false

Это не имеет смысла — я получаю кэшированные документы, даже если мое сохранение отключено.

Есть идеи, в чем проблема?

Изменить: я попытался очистить кеш, но это не решило проблему.


person Zorgan    schedule 20.07.2019    source источник
comment
Пожалуйста, отредактируйте вопрос, чтобы объяснить, как именно вы наблюдаете, что документы определенно поступают из кеша, а не с сервера.   -  person Doug Stevenson    schedule 20.07.2019
comment
Отредактировано - когда это произойдет снова, я включу кэшированный журнал документов.   -  person Zorgan    schedule 21.07.2019
comment
Возможно, Дуг не увидел вашего ответа, так как вы не отметили его @. Он мог бы помочь, я думаю   -  person Farid    schedule 20.09.2019
comment
@DougStevenson Я обновил свой ответ несколькими примерами извлечения кеша.   -  person Zorgan    schedule 21.09.2019


Ответы (1)


Теперь вы можете выбрать, хотите ли вы получать данные только с сервера или только из кеша, например так (пример только для сервера):

DocumentReference documentReference= FirebaseFirestore.getInstance().document("example");
documentReference.get(Source.SERVER).addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
    @Override
    public void onSuccess(DocumentSnapshot documentSnapshot) {
            //...
    }
});

Только для кеша просто измените приведенный выше код на Source.CACHE.

По умолчанию оба метода по-прежнему пытаются использовать сервер и возвращаются к кешу.

person Pranav Darji    schedule 02.08.2019
comment
Спасибо, это решило бы мою проблему, но я использую библиотеку для своих запросов: github.com/imperiumlabs/ GeoFirestore-Android, поэтому у меня нет прямого доступа к моему коду. - person Zorgan; 03.08.2019
comment
@Zorgan, поскольку в geofirestore нет возможности принудительно читать сервер, вы можете просто добавить эту библиотеку в качестве модуля и изменить эту конкретную часть. - person Farid; 20.09.2019