首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在本地存储具有复杂结构的数据?

如何在本地存储具有复杂结构的数据?
EN

Stack Overflow用户
提问于 2019-06-17 19:30:14
回答 1查看 440关注 0票数 1

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

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

以下是我从缓存访问文档的方式:

代码语言:javascript
复制
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/

代码语言:javascript
复制
|----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 */
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-17 21:45:18

我的问题是,什么是存储数据的最佳方式,以及如何实现最好的方式?

如果您想将数据持久化到您的电话中,您可以尝试使用SQLite房间持久化库,在这里您可以从您向我们展示的结构中定义一个数据库,并能够查询存储的文档。

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

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

如果使用此方法,则遵循相同的原则,并在必须从Firestore获取文档之前,检查共享首选项(如果文档在那里)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56637766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档