es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El campo Enum de una entidad de Android Room provoca que la compilación falle.

Noté que desde Room 2.3.0-alpha04 se admite un campo de Enum para Entity (de esta publicación), así que intenté pero no pude…

Mi Enum de Género:

enum class Gender(val value: String) {
    MALE("Masculino"),
    FEMALE("Femenino"),
    UNKNOWN("Desconocido")
}

Mi Entity Student:

@Entity(tableName = "estudiante")
data class Student(
    var nombre: String,
    var edad: Int,
    var genero: Gender    //<- Enum
) {
    @PrimaryKey(autoGenerate = true)
    var id: Long = 0
}

Mi Dao:

@Dao
interface StudentDao {
    @Query("SELECT * FROM estudiante")
    fun getAllStudentsFlow(): Flow<>>

    @Insert
    suspend fun insertar(estudiante: Student)

    @Query("SELECT COUNT(nombre) FROM estudiante WHERE nombre = :nombre")
    suspend fun getCountNombre(nombre: String): Int
}

Estoy usando la última versión:

implementación "androidx.room:room-runtime:2.4.0-beta02"
implementación "androidx.room:room-ktx:2.4.0-beta02"
kapt "androidx.room:room-compiler:2.4.0-beta02"

Y obteniendo este error:

> Tarea: app:compileDebugJavaWithJavac FALLÓ
 C:\...\com\example\roomwithenum\database\StudentDao_Impl.java:87: ����: �޷����� 
Los argumentos del constructor de Student no coinciden con los atributos en Student;
            _item = new Student();
                ^
  Debe ser: String, int, Gender
  Se encuentra: Argumentos no encontrados
  Origen: No se puede resolver a ningún constructor
1 error

Se agradecerá cualquier ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás teniendo problemas para usar campos Enum con Room. Desafortunadamente, Room actualmente no admite campos Enum, como se señala en la documentación.

    Puedes resolver esta limitación usando un campo String en lugar de un campo Enum. Luego puedes usar un TypeConverter para convertir entre los valores String y los valores Enum. Puedes encontrar un ejemplo de esto en la documentación.

Comments are closed.