Persistencia de la habitación: Error: las entidades y Pojos deben tener un constructor público utilizable

Estoy convirtiendo un proyecto en Kotlin y estoy tratando de convertir mi model (que también es mi entidad) en una class de datos. Pretendo usar Moshi para convertir las respuestas JSON de la 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 ) 

No puedo comstackr la aplicación causando el siguiente error

Las entidades y Pojos deben tener un constructor público utilizable. Puede tener un constructor vacío o un constructor cuyos parameters coincidan con los campos (por nombre y tipo). No se puede encontrar setter para el campo.

Los ejemplos que encontré no están lejos de esto

Ideas sobre cómo resolverlo?

Tuve un problema similar antes.

Primero, he actualizado / agregado el apply plugin: 'kotlin-kapt' a gradle.

A continuación, lo he usado en lugar de annotationProcessor en gradle:

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

Lo último fue crear una class de datos inmutables:

 @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 ) 

necesitas especificar un constructor secundario como ese:

 @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) } 

Lo que funcionó para mí:

 @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://issuetracker.google.com/issues/62851733

¡Descubrí que este es el error de proyección de @Relation! no el problema del lenguaje de Kotlin. basado en google GithubBrowserSample java también ocurrió error, pero post de error diferente.

a continuación está mi código de kotlin:

 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() ) 

derecho:

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

Creo que una buena opción para resolverlo es:

 @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 ) 
  • Cómo pasar la class Java a la class de datos de Kotlin
  • ¿Qué sucede cuando se presiona el button Atrás antes de que se complete una llamada asíncrona?
  • ¿Cómo se soluciona la initialization del campo val con el proxy Spring Security?
  • ¿Cómo pasar un parámetro de tipo a una reference genérica de constructor de class?
  • Oyente binding; No se puede encontrar el colocador
  • Falló la inferencia de tipo: RecyclerViewActions.scrollTo ()
  • ¿Cómo puedo usar el retorno en lugar de dejar entrar a Kotlin?
  • object anónimo javascript en kotlin
  • Lista de types incompatibles de Kotlin <Cualquier> y Lista <Comparable <{com.cognitect.transit.Symbol & com.cognitect.transit.Keyword}>?>
  • SetOnClickListener en un ViewHolder en Kotlin Adapter
  • Detecta la colisión de vistas y evita la sobrepresión