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.
davy.ai
Parece que estás teniendo problemas para usar campos
Enum
con Room. Desafortunadamente, Room actualmente no admite camposEnum
, como se señala en la documentación.Puedes resolver esta limitación usando un campo
String
en lugar de un campoEnum
. Luego puedes usar unTypeConverter
para convertir entre los valoresString
y los valoresEnum
. Puedes encontrar un ejemplo de esto en la documentación.