java - 在 Android Room 数据库中存储 List<Object>

标签 java android kotlin retrofit2 android-room

我目前正在使用 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)

任何人都可以向我指出任何相关文档,或者通过给我一个如何存储对象列表的示例来帮助我吗?

最佳答案

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

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

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

有很多关于如何做到这一点的教程。

关于java - 在 Android Room 数据库中存储 List<Object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56895107/

相关文章:

java - 如何使用 Kotlin 迭代类组件

android - Kotlin:应用程序不询问用户权限

spring - 找不到插件 : jpa

java - Android 处理日历的按钮

java - IOException:无法访问的异​​常代号one

java - Android Canvas 动画出现卡顿(不流畅)

android - 关于泛型导致 ClassCastException LinkedTreeMap 无法转换为 Any

javascript - 如何在java中防止javascript注入(inject)

android - Hilt 中的组件依赖项

java - 删除 EditText 中的第二个点/逗号