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 convierto un Char a Int?
  • Kotlin enum class en el performance de Android
  • Combine security nula y assertNotNull
  • ¿Cómo generar un file kotlin desde un procesador de anotación?
  • SetOnClickListener en un ViewHolder en Kotlin Adapter
  • La cobertura de código de estudio de Android no muestra ninguna class de Kotlin
  • Android: Obtenga un DAO en un ViewModel
  • Kotlin generic super / child classes
  • Kotlin: reference no resuelta: javaClass
  • Kotlin zipToda alternativa
  • Posicionamiento de vista inflada dentro de un layout personalizado