Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.1K
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda