简体   繁体   English

TypeConverter 不适用于 android Room DB

[英]TypeConverter not working for android Room DB

So I am trying to save a list of string pairs into my database but having some issues with the TypeConverter, I tried following guides ans other SO posts but can't figure out whats wrong...因此,我试图将字符串对列表保存到我的数据库中,但 TypeConverter 存在一些问题,我尝试按照指南和其他 SO 帖子进行操作,但无法弄清楚出了什么问题......

My Entity:我的实体:

@Entity
data class Credential(
    @PrimaryKey()
    val id: String,

    @ColumnInfo(name = "name")
    val name: String,

    @ColumnInfo(name = "url")
    val url: String?,

    @TypeConverters(ListPairTypeConverter::class)
    @ColumnInfo(name = "fields")
    val fields: List<Pair<String, String>>
)

My Type Converter:我的类型转换器:

class ListPairTypeConverter {
    @TypeConverter
    fun storedStringToPairList(value: String): List<Pair<String, String>> {
        return value.split("~!!!!!~").map {
            val vals = it.split("!~~~~~!")
            Pair(vals[0], vals[1])
        }
    }

    @TypeConverter
    fun pairListToStoredString(pl: List<Pair<String, String>>): String {
        return pl.joinToString(separator = "~!!!!!~") { it.first + "!~~~~~!" + it.second }
    }
}

My Error:我的错误:

error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
    private final java.util.List<kotlin.Pair<java.lang.String, java.lang.String>> fields = null;
                                                                                  ^

You are adding type converter at wrong place.您在错误的位置添加了类型转换器。 instead of代替

@TypeConverters(ListPairTypeConverter::class)
@ColumnInfo(name = "fields")
val fields: List<Pair<String, String>>

You need to add at here你需要在这里添加

@Database(entities = [User::class], version = 1)
@TypeConverters(ListPairTypeConverter::class)
abstract class AppDatabase : RoomDatabase() {
  abstract fun userDao(): UserDao
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM