改造-转换Json响应以使用Room轻松存储数据

时间:2019-11-21 02:25:24

标签: android kotlin retrofit2 android-room

是否可以将其转换为

{
"news": [
 {
  "nid": 1,
  "type": "test1",
 },
 {
  "nid": 2,
  "type": "test2",
 }
]
}

为此,当我收到Retrofit的结果吗?

 {
  "nid": 1,
  "type": "test1",
 },
 {
  "nid": 2,
  "type": "test2",
 }

实际上,在我的模型中,我有一个 NewsList 对象,其中包含一个 News 列表(其内部值为:nid,类型)。
Retrofit查询看起来像这样:

@GET("test/test.json")
suspend fun getListNews(): Response<Newslist>

一切正常,但是现在我需要使用Room将数据保存在数据库中,如果Retrofit查询像这样,将更加容易:

@GET("test/test.json")
suspend fun getListNews(): Response<List<News>

实现此目标的最佳方法是什么?

  1. 转换Json响应以获得类似上面的内容?
  2. 是否保留这样的内容并转换NewsList以能够存储在Room数据库中?

3 个答案:

答案 0 :(得分:0)

最好的方法是让后端服务器返回规范的json数据。

如果无法实现,则可以通过addConverterFactory方法自定义converterFactor,此方法与自定义converterFactor中的此数据格式兼容。

答案 1 :(得分:0)

最好的方法是使用RXJava或Kotlin的协程。

在RXJava中,您可以使用地图运算符将响应对象转换为对象列表。

请参考下面的链接以了解将RXJava与改造和转换结果一起使用的想法:

https://www.journaldev.com/20433/android-rxjava-retrofit

答案 2 :(得分:0)

首先,您必须为数据提供者提供一层以供使用者使用(活动,VM,片段等)。 在此层中,您具有用例来定义从Cloud(Retrofit)或从Local Storage(Room)的数据收集。更多信息,我有示例here