【问题标题】:How to store Google Cloud Firestore data locally having a complex structure?如何在本地存储具有复杂结构的 Google Cloud Firestore 数据?
【发布时间】:2019-06-17 19:30:14
【问题描述】:

我在 Google Cloud Firestore 上有一个数据库,我正在 Kotlin 中制作一个 Android 应用程序来访问它。数据库只有一个集合,但有很多文档。 一次用户只需要大约 5-6 个文档。在线数据库的原因是将来可以轻松添加更多文档。 下载后,下载的文档数据很少会更新。 所以,下载后,我希望他们在没有互联网的情况下访问。

我的问题是,即使文档存储在本地,要访问它们,我也必须设置一个侦听器,因此代码变得异步,这使事情变得非常复杂。所以我想以不同的方式将它们存储在本地,这样我就可以毫不拖延地访问数据 .

这是我从缓存中访问文档的方式:

val db = FirebaseFirestore.getInstance().collection("courses")
db.document("doc_name").get(Source.CACHE).addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // what to write here
        // to store the data locally
        // if some other method is used ?     
    } else {
        // documents need to be re-downloaded
    }
}

我的问题是存储数据的最佳方式是什么以及如何实施这种最佳方式?鉴于所有文档都具有类似但非常复杂的结构,如下所示。

collection/doc_example/:

|----string
|
|----string
|
|----map
|    |----string
|    |----int
|
|----int
|
|----array{size=3, type=int}
|
|----string
|
|----map
|    |----int
|    |----array{size=variable, type=map}
|         |----map
|              |----string
|              |----int
|              |----array{size=variable, type=string}
|
|----array{size=variable, type=string}
|
|----array{size=variable, type=string}    /* note - this array is optional */
|                                            
|----array{size=variable, type=map}
     |----map
          |----string
          |----string     
          |----int
          |----string
          |----string    /* note - this one string is optional */

【问题讨论】:

    标签: android kotlin google-cloud-firestore android-storage


    【解决方案1】:

    我的问题是存储我的数据的最佳方式是什么以及如何实施这种最佳方式?

    如果您想在手机中保留数据,可以尝试使用 SQLiteRoom Persistence Library,您可以在其中根据您向我们展示的结构定义数据库,并能够查询存储的文档。

    这样,在第一次获得文档后,您就可以将其存储在数据库中。在将来尝试获取它时,您应该首先检查它是否存储在您的数据库中。如果不是,那么您可以继续从 Firestore 获取它(并将其保存在本地)。

    我用来在本地存储和持久化数据的另一个资源是通过Android Shared Preferences。恕我直言,这比使用 SQLite 或 Room 简单,但它对复杂的数据结构有其局限性(AFAIK,它只能存储原始数据和 StringSets)......好消息是您可以将文档保存为JSON 字符串 并轻松将其存储在您的共享首选项中(实际上,您的文档结构对于 JSON 格式来说已经足够了,因为它有地图、数组等)。

    如果使用它,那么您遵循相同的原则,并在必须从 Firestore 中获取文档之前检查您的共享首选项(如果该文档存在)。

    【讨论】:

      猜你喜欢
      • 2019-01-08
      • 2021-10-15
      • 2019-09-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2020-03-01
      • 2017-03-14
      相关资源
      最近更新 更多