Постоянство помещения: ошибка: сущности и Pojos должны иметь полезный публичный конструктор

Я конвертирую проект в Kotlin, и я пытаюсь сделать свою модель (которая также является моей сущностью) классом данных, который я намерен использовать Moshi для преобразования ответов JSON из API

@Entity(tableName = "movies") data class MovieKt( @PrimaryKey var id : Int, var title: String, var overview: String, var poster_path: String, var backdrop_path: String, var release_date: String, var vote_average: Double, var isFavorite: Int ) 

Я не могу создать причину приложения следующей ошибки

У объектов и Pojos должен быть полезный публичный конструктор. У вас может быть пустой конструктор или конструктор, параметры которого соответствуют полям (по имени и типу). Невозможно найти установщик для поля.

Примеры, которые я нашел, находятся недалеко от этого

Идеи о том, как его решить?

Раньше была аналогичная проблема.

Сначала я обновил / добавил apply plugin: 'kotlin-kapt' для градиента.

Затем я использовал его вместо annotationProcessor в gradle:

kapt "android.arch.persistence.room:compiler:1.0.0-alpha4"

Последнее заключалось в создании неизменяемого класса данных:

 @Entity(tableName = "movies") data class MovieKt( @PrimaryKey val id : Int, val title: String, val overview: String, val poster_path: String, val backdrop_path: String, val release_date: String, val vote_average: Double, val isFavorite: Int ) 

ОБНОВИТЬ:

Это решение работает, когда у вас есть классы для модели и классы для базы данных в одном Android-модуле. Если у вас есть классы моделей в модуле библиотеки Android и остальная часть кода в основном модуле, Room не узнает их.

вам нужно указать вспомогательный конструктор, например:

 @Entity(tableName = "movies") data class MovieKt( @PrimaryKey var id : Int, var title: String, var overview: String, var poster_path: String, var backdrop_path: String, var release_date: String, var vote_average: Double, var isFavorite: Int ) { constructor() : this(0, "", "", "", "", "", 0.0, 0) } 

Что сработало для меня:

 @Entity(tableName = "movies") data class MovieKt( @PrimaryKey var id : Int? = 0, var title: String? = "", var overview: String? = "", var poster_path: String? = "", var backdrop_path: String? = "", var release_date: String? = "", var vote_average: Double? = 0.0, var isFavorite: Int? = 0 ) 

Это оказалось ошибкой в ​​библиотеке https://github.com/googlesamples/android-architecture-components/issues/49

https://issuetracker.google.com/issues/62851733

Я нашел, что это ошибка проекции @ Relation! не проблема языка Котлина. основанный на Google GithubBrowserSample java, также произошла ошибка, но другое сообщение об ошибке.

ниже мой котлин код:

 data class UserWithCommunities( @Embedded var user: User = User(0, null), @Relation(parentColumn = "id", entityColumn = "users_id", entity = CommunityUsers::class, projection = arrayOf("communities_id")) // delete this line. var communityIds: List<Int> = emptyList() ) 

правильно:

 data class UserWithCommunities( @Embedded var user: User = User(0, null), @Relation(parentColumn = "id", entityColumn = "users_id", entity = CommunityUsers::class) var communityList: List<CommunityUsers> = emptyList() ) 

Я думаю, что хороший вариант для решения:

 @Entity(tableName = "movies") data class MovieKt( @PrimaryKey var id : Int = 0, var title: String = "", var overview: String = "", var poster_path: String = "", var backdrop_path: String = "", var release_date: String = "", var vote_average: Double = 0.0, var isFavorite: Int = 0 )