【问题标题】:Storing a List<Object> in Android Room database在 Android Room 数据库中存储 List<Object>
【发布时间】:2019-07-04 23:37:46
【问题描述】:

我目前正在使用 RetroFit 从网络上检索一个 JSON 对象,我得到的 JSON 对象实际上是一个对象列表。我想将该列表存储到 Room 数据库表中。

interface currentNewsService {
    @GET("api/feed")
    fun getFeed(
            @Query("amount") amount: Int,
    ): Deferred<currentNewsResponse>

    companion object{

        operator fun invoke(): currentNewsService {

            val okHttpClient = OkHttpClient.Builder().build()
            return Retrofit.Builder().client(okHttpClient)
                    .baseUrl("https://someUrl")
                    .addCallAdapterFactory(CoroutineCallAdapterFactory())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build().create(currentNewsService::class.java)
        }
    }
}

然后我创建了一个数据类,让我可以访问 RetroFit 调用的响应。我收到了来自网络的回复,但在房间中存储对象列表时遇到问题。

data class currentNewsResponse(
        val news: List<News>){
}

这是我在 Room 中创建的表格示例:

@Entity(tableName = "news", indices = [Index(value = ["newsId"], unique = true)])
data class Feed(
@PrimaryKey
val id: Int
@SerializedName("current_news_id")
val newsId: Int)

谁能给我指出任何相关的文档或通过给我一个关于如何存储对象列表的示例来帮助我?

【问题讨论】:

    标签: java android kotlin retrofit2 android-room


    【解决方案1】:

    Room 不允许您直接存储 List 的对象。

    您正在寻找的答案是TypeConverter,您可以使用它将您的对象列表转换为 Room 允许的类型,并在查询时转换回对象列表。

    您已经使用Gson。因此,在您的TypeConverter 中使用Gson 序列化/反序列化您的数据。

    关于如何做的教程太多了。

    【讨论】:

      猜你喜欢
      • 2019-06-20
      • 2019-05-24
      • 2020-10-27
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      相关资源
      最近更新 更多