La bibliothèque de pièces ne reconnaît pas un TypeConverter
que j'ai créé pour un List
d'enums. Cependant, quand je change ceci en un ArrayList
d'enums cela fonctionne bien. Quelqu'un a une idée de pourquoi et que puis-je faire pour que cela fonctionne avec List
? (Utilisation de la liste dans Kotlin est plus facile et je ne veux vraiment pas être en train de convertir en avant et en arrière à ArrayList
juste à cause de cela).Android Erreur de salle: TypeConverter non reconnu pour la liste des énumérations
Voici mon code:
Mon modèle:
@Entity
data class Example(@PrimaryKey val id: String?,
val name: String,
var days: List<DayOfWeek>?)
DayOfWeek
est un ENUM:
enum class DayOfWeek {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY;
val value: Int
get() = ordinal + 1
companion object {
private val ENUMS = DayOfWeek.values()
fun of(dayOfWeek: Int): DayOfWeek {
if (dayOfWeek < 1 || dayOfWeek > 7) {
throw RuntimeException("Invalid value for DayOfWeek: " + dayOfWeek)
}
return ENUMS[dayOfWeek - 1]
}
}
}
Mon TypeConverter
:
private const val SEPARATOR = ","
class DayOfWeekConverter {
@TypeConverter
fun daysOfWeekToString(daysOfWeek: List<DayOfWeek>?): String? {
return daysOfWeek?.map { it.value }?.joinToString(separator = SEPARATOR)
}
@TypeConverter
fun stringToDaysOfWeek(daysOfWeek: String?): List<DayOfWeek>? {
return daysOfWeek?.split(SEPARATOR)?.map { DayOfWeek.of(it.toInt()) }
}
}
Une d Je l'ai mis dans ma classe de DB comme ceci:
@Database(entities = arrayOf(Example::class), version = 1)
@TypeConverters(DayOfWeekConverter::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun exampleDao(): ExampleDao
}
Mon OAC ressemble à ceci:
@Dao
interface ExampleDao {
@Query("SELECT * FROM example")
fun getAll(): LiveData<List<Example>>
@Insert(onConflict = REPLACE)
fun save(examples: List<Example>)
}
L'erreur que je reçois avec ce code est:
error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
e:
e: private java.util.List<? extends com.example.DayOfWeek> days;
Comme je l'ai dit ci-dessus, si je change la propriété days
à ArrayList<DayOfWeek>
(et apporter les modifications à ArrayList
dans DayOfWeekConverter
) alors tout fonctionne bien. Si quelqu'un peut m'aider à comprendre cela et me dire comment je peux utiliser List
ici ce serait d'une grande aide, cela me rend fou: /.
votre classe S'il vous plaît publier « ExampleDao ». –
Le DAO ne semble pas pertinent pour le problème que j'ai avec @PravinDivraniya, mais je l'ai ajouté maintenant au cas où cela vous aiderait à comprendre le problème. À votre santé. – Franco
Je suis tombé sur le même problème. Étant donné que, apparemment, ce n'est pas possible, j'ai créé une demande de fonctionnalité: https://issuetracker.google.com/issues/69164099 –