Сохранение списка <Object>в базе Android Room - PullRequest
0 голосов
/ 05 июля 2019

В настоящее время я извлекаю объект JSON из Интернета с помощью RetroFit, объект, который я получаю, на самом деле представляет собой список объектов.Я хотел бы сохранить этот Список в таблице базы данных 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>){
}

Вот пример таблицы, которую я создаю в комнате:

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

Может кто-нибудь указать мне на любую соответствующую документацию или помочь мне, дав мне пример того, какВы бы пришли к хранению списка объектов?

1 Ответ

1 голос
/ 05 июля 2019

Комната не позволяет хранить List объектов напрямую.

Ответ, который вы ищете: TypeConverter , с помощью которого вы преобразуете свой Список объектов в тип, который позволяет Room, и конвертируете обратно в Список объектов при запросе.

Вы уже используете Gson. Итак, сериализуйте / десериализуйте ваши данные с Gson внутри вашего TypeConverter.

Есть так много уроков о том, как это сделать.

...