如何强制在Firestore中获取缓存的文档?我想在线上获取缓存的文档

时间:2019-09-30 01:18:53

标签: android firebase caching google-cloud-firestore

所以我有这种方法可以从Firestore查询文档:

FirestoreCollectionReference.event.getReference()
            .whereEqualTo(FIRESTORE_EVENT_FIELD_CITY,selectedCity)
            .whereEqualTo(FIRESTORE_EVENT_FIELD_HAS_BEEN_APPROVED,true)
            .whereGreaterThanOrEqualTo(FIRESTORE_EVENT_FIELD_DATE_START_TIME,now.toDate())
            .whereLessThanOrEqualTo(FIRESTORE_EVENT_FIELD_DATE_START_TIME,oneMonthFromNow.toDate())
            .orderBy(FIRESTORE_EVENT_FIELD_DATE_START_TIME, Query.Direction.ASCENDING)
            .orderBy(FIRESTORE_EVENT_FIELD_RANKPOINT, Query.Direction.DESCENDING)
            .limit(limit)
            .get()
            .addOnSuccessListener { snapshot ->

                val eventDocuments = snapshot.documents
                val eventArray = ArrayList<Event>()

                for (document in eventDocuments) {
                    val eventData = document.data
                    val event = Event(dataEvent = eventData)
                    eventArray.add(event)
                }

                completion(null,eventArray)

            }.addOnFailureListener {
                completion(it.localizedMessage,null)
            }

我了解,如果我的应用程序使用该方法脱机,firestore将自动使用缓存的文档。

但是我想要的是....

说我的应用程序将始终在线。但我不希望每次打开应用程序时,它始终会从服务器中获取数据。我想限制一下。

如果最后一个时间戳用户从服务器获取数据的时间超过一个小时前,那么可以,从服务器获取数据并显示加载指示器。否则,仅从先前从服务器获取的缓存文档中获取数据,并且不显示加载指示器。

我可以这样做吗?如何在Firestore中强制获取缓存的文档?即使用户在线,我也想获取缓存的文档

我已尝试从此处https://firebase.google.com/docs/firestore/manage-data/enable-offline阅读文档 但是似乎只有在发生脱机情况下才能检索缓存的文档。该示例适用于实时侦听器。就我而言,我只使用get()

2 个答案:

答案 0 :(得分:0)

将其用于Firestore设置(在Kotlin中)

val firestoreSettings: FirebaseFirestoreSettings = FirebaseFirestoreSettings.Builder()
                        .setPersistenceEnabled(false/*OR True | Control it whenever you need*/)
                        .setSslEnabled(true)
                        .build()
firebaseFirestore.firestoreSettings = firestoreSettings

答案 1 :(得分:0)

如果您想显式控制get()从何处获取数据,可以传入一个Source参数,告诉它该怎么做:

.get(Source.CACHE)

.get(Source.SERVER)

另请参见get(Source)的{​​{3}}和guide