Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.1K
Vistas
Cómo resolver "Las entidades y los POJO deben tener un constructor público utilizable"

He visto esta pregunta varias veces en SO. sin embargo, la solución no parece aplicarse a mi problema.

Tengo una clase de datos de Kotlin que se usa como entidad en la sala.

 @Entity(tableName = "training_session") data class SessionEntity( @PrimaryKey(autoGenerate = false) val id: Long, @ColumnInfo(name = "current_state_marker") val currentState: Short, @Embedded val states: List<Int> )

esta produciendo

 > Task :training-infrastructure:kaptDebugKotlin FAILED error: Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type). - java.util.List error: Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type). - java.util.List

En el mismo proyecto tengo una entidad muy similar que también tiene una lista y eso no produce ningún error.


Probé la respuesta proporcionada por MikeT , para mí requirió un pequeño cambio en la forma en que se definieron los convertidores.

 data class SessionStateList (val stateList : List<Int>) class SessionStateListConverter { @TypeConverter fun fromArraySessionStateList(sh: List<Int>?): String? { return Gson().toJson(sh) } @TypeConverter fun toArraySessionStateList(sh: String?): List<Int>? { val listType: Type = object : TypeToken<ArrayList<Int?>?>() {}.type return Gson().fromJson(sh,listType) } }

Un seguimiento rápido. Mencioné que tengo otra entidad que tiene un Embedded val something: List<Int> y no noté ningún error de compilación.

La razón por la que no noté ningún error del compilador fue porque la entidad no estaba incluida en la anotación @Database .

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No puede tener una lista/matriz, etc. como tipo de columna. Por lo tanto, su problema se centra en @Embedded val states: List<Int>

Podría tener un POJO, por ejemplo, StatesHolder: -

 data class StatesHolder( val stateList: List<Int> )

y luego tener

 @Entity(tableName = "training_session") data class SessionEntity( @PrimaryKey(autoGenerate = false) val id: Long, @ColumnInfo(name = "current_state_marker") val currentState: Short, val states: StatesHolder )
  • Tenga en cuenta que no puede incrustar StatesHolder ya que eso solo inserta List. Si desea incrustar, debe incrustar un contenedor que use un StatesHolder.

Luego necesitará TypeConverters para convertir hacia y desde un objeto StatesHolder a un tipo que se pueda almacenar. Probablemente una cadena y probablemente una representación JSON del objeto StatesHold, por ejemplo

 class Converters { @TypeConverter fun fromStatesHolder(sh: StatesHolder): String { return Gson().toJson(sh) } @TypeConverter fun toStatesHolder(sh: String): StatesHolder { return Gson().fromJson(sh,StatesHolder::class.java) } }

Además, debe usar la anotación @TypeConverters que define la clase Converts::. Si se codifica en el nivel @Database, los convertidores tienen alcance completo.

Entonces, después de @Database(.....) podrías tener: -

 @TypeConverters(Converters::class)
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda