Converter
class Converters {
@TypeConverter
fun fromPreferUsrNames(json: String?): List<String>?{
return Gson().fromJson<List<String>>(json, getTypeToken<List<String>>())
}
@TypeConverter
fun preferUsrNamesToString(usrNames: List<String>?): String?{
val json = Gson().toJson(usrNames)
return json
}
}
Data
@Entity(tableName = "groups")
data class Group(
@PrimaryKey val groupId: Int
){
var preferUsrNames: List<String>? =
}
想在数据库里保存一个List
对象,但是Room
不允许List
对象直接保存,所以用Converter
转成了Json
来保存
SET
直接修改某一行的该属性时,如果还传List
的话,Room
不会转换并且会直接把这个参数搞成null
@Query("UPDATE groups SET preferUsrNames =:usrNames WHERE groupId =:groupId")
suspend fun updateGroupPreferenceUsrNames(groupId: Int, usrNames: List<String>?)
相当于usrNames
这个参数取null
所以必须你提前转好Json
,直接传已经转换好格式的数据进去,才能正确存入
@Query("UPDATE groups SET preferUsrNames =:usrNames WHERE groupId =:groupId")
suspend fun updateGroupPreferenceUsrNames(groupId: Int, usrNames: String?)