【问题标题】:how to force to get cached documents in Firestore ? I want to get cached documents when online [duplicate]如何强制在 Firestore 中获取缓存的文档?我想在在线时获取缓存的文档[重复]
【发布时间】:2020-01-29 07:27:10
【问题描述】:

所以我有这个方法可以从 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()

【问题讨论】:

    标签: android firebase caching google-cloud-firestore


    【解决方案1】:

    如果你想明确控制get() 从哪里获取数据,你可以传入一个Source 参数来告诉它做什么:

    .get(Source.CACHE)
    

    .get(Source.SERVER)
    

    另请参阅guidereference documentation for get(Source)

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 为什么将持久性设置为 false ?你能稍微解释一下吗?因为我想使用以前从服务器获取的缓存文档
      • 您说“假设我的应用程序将始终在线”。所以它强制在线。控制和限制您的应用程序打开或恢复...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-04
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-13
      相关资源
      最近更新 更多