无法弄清楚如何将此字段保存到数据库中.我已经编写了数据类、dao和类型转换器,但仍然无法检测到错误



MyData.kt

@Entity(tableName = "my_table")
data class MyData(
@PrimaryKey(autoGenerate = true)
var id: Long = 0L,
@ColumnInfo(name = "ListData")
@TypeConverters(DataTypeConverter::class)
var mList: List<User> = emptyList(),
@Embedded
var user: User
)

MyDataDao.kt

@Dao
interface MyDataDao {
@Insert
suspend fun insert(data: MyData)
@Update
suspend fun update(data: MyData)
@Query("SELECT * FROM my_table")
fun getAll(): LiveData<List<MyData>>
}

DataTypeConverter.kt

import androidx.room.TypeConverter
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken

class DataTypeConverter {
companion object {
inline fun <reified T> Gson.fromJson(json: String) =
fromJson<T>(json, object : TypeToken<T>() {}.type)

@TypeConverter
fun stringToList(data: String?): List<User> {
data?.let {
return Gson().fromJson(data)
}
return emptyList()
}

@TypeConverter
fun listToString(users: List<User>): String {
return Gson().toJson(users)
}
}
}

用户.kt

data class User(
@ColumnInfo(name = "first_name")
val firstName: String,
@ColumnInfo(name = "last_name")
val lastName: String
)

生成时获取此错误

错误:无法弄清楚如何将此字段保存到数据库中。你可以考虑为它添加一个类型转换器。

即使在使用了类型转换器之后,问题仍然是持久的

我认为您的DataTypeConverter是错误的,您可以尝试这样的更改:

class DataTypeConverter{
var gson = Gson()
@TypeConverter
fun stringToUserList(data: String?): List<User?>? {
if (data == null) {
return Collections.emptyList()
}
val listType: Type =
object : TypeToken<List<User?>?>() {}.type
return gson.fromJson<List<User?>>(data, listType)
}
@TypeConverter
fun userDetailListToString(someObjects: List<User?>?): String? {
return gson.toJson(someObjects)
}
}

不要忘记将@TypeConverters(DataTypeConverter::class)添加到@Database

最新更新