离线时 Android 缓存只读 REST API 响应

标签 android json sqlite caching android-lru-cache

我正在考虑两种方法

  • 将 JSON 响应缓存为 JSON 文件
  • 使用 Reservoir 缓存 Java POJO(JSON 响应已经使用 Retrofit 反序列化)。

数据说明:
我要在此处缓存的数据是来自电子商务网站的 20 种产品的列表。它们不是复杂的对象,并且没有嵌套,因为这里使用了 jsonapi.org 规范。 通过 Retrofit,我已经可以获得 20 个 Product POJO,其中 Product 是具有少于 10 个属性的 Java 模型类。

哪种方法更好,为什么?

我不考虑 SQLite 数据库,因为我认为它更昂贵并且只适用于

  • 需要数据完整性
  • 有写操作,例如购物车
  • 数据量大,关系复杂

最佳答案

这实际上取决于两个主要因素: 1.用例 2. 对特定系统的舒适程度。

你可以使用任何你认为适合你的。如果你真的需要像数据库这样的数据结构和一些复杂的查询机制,SQLite 是可以的。如果对您有帮助,您可以使用一些 ORM 系统(如 GreenDAO 或 ORMLite)包装 SQLite。还有 Realm,更多面向对象的方法(有问题)。

您还可以选择 SharedPreferences(我个人不喜欢这种方法)或仅使用 parcelable 或 Java 序列化将 POJO 序列化为文件。这实际上取决于您想要实现的目标,因为任何方法都有利有弊。

对于面向 SQL 的数据库,SQL 的用户群很大,这很好,但您需要映射不太好

Realm,可能是移动设备数据库中的下一件大事(),但它还不成熟,在检索时你必须使用具体的类(),我可能想要一个抽象/接口(interface)/基类。

Parcelable - 您必须编写大量代码()但速度非常快()

Java 序列化 - 易于重构任何可序列化类,无需序列化代码,良好适用于中小型数据量。 不太好因为它使用了反射,所以对于非常大量的数据。

关于离线时 Android 缓存只读 REST API 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38524104/

相关文章:

android - 使 SlidingDrawer 的内容部分始终可见?

database - 用于黑莓的 SQLite

sql - 删除或更新SQL记录

android - 在哪里放置android BindingAdapter 方法?

javascript - 在 Android 上动态更改 HTML5 视频 src?

android - 自定义操作栏删除 Logo 的左边距

sql - 具有空值的复合唯一约束

json - 使用 Mule 中的 Dataweave 将定界文件转换为 JSON 格式

php - 在php中输出json数组

javascript - 取消嵌套从 api 返回的 JSon 对象