如何为 RoomDatabase 创建 TypeConverter
how can create TypeConverter for RoomDatabase
在我的项目中,我有两个数据模型class
第一:
@Entity(tableName = TABLE_TASK)
data class TaskEntity(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "task_id") val taskId: Int,
@ColumnInfo(name = "task_title") val taskTitle: String?,
@ColumnInfo(name = "task_desc") val taskDesc: String?,
@ColumnInfo(name = "task_priority") val taskPriority: Int?,
@ColumnInfo(name = "task_status") val taskStatus: String?,
@ColumnInfo(name = "task_time") val taskTime: String?,
@ColumnInfo(name = "task_notify") val taskNotify: String?
)
第二个:
data class SubtaskModel(
val subTasktitle : String?,
val subTaskStatus : Boolean?
)
我想在我的第一个数据模型 class 中添加一个字段作为下面的代码(最后一个字段):
@Entity(tableName = TABLE_TASK)
data class TaskEntity(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "task_id") val taskId: Int,
@ColumnInfo(name = "task_title") val taskTitle: String?,
@ColumnInfo(name = "task_desc") val taskDesc: String?,
@ColumnInfo(name = "task_priority") val taskPriority: Int?,
@ColumnInfo(name = "task_status") val taskStatus: String?,
@ColumnInfo(name = "task_time") val taskTime: String?,
@ColumnInfo(name = "task_notify") val taskNotify: String?,
@ColumnInfo(name = "task_subtask") val taskSubTask: MutableList<SubtaskModel>?
)
我遇到的错误:
Cannot figure out how to save this field into database. You can
consider adding a type converter for it.
所以我阅读了(developer.android.com)并搜索了这个,但我不知道如何编写类型转换器。
谢谢
Follow below steps :
第一步。 : 创建转换器 class -
class MyConverter {
@TypeConverter
fun listToJson(value: List< SubtaskModel >?): String = Gson().toJson(value)
@TypeConverter
fun jsonToList(value: String) = Gson().fromJson(value, Array<SubtaskModel>::class.java).toList()
}
步骤 2 -> 将转换器添加到您的数据库 class
@Database(entities = [TaskEntity::class], version = 1)
@TypeConverters(MyConverter::class)
abstract class myDataBase : RoomDatabase() {
abstract fun myDao(): MyDao
}
就是这样。
在我的项目中,我有两个数据模型class 第一:
@Entity(tableName = TABLE_TASK)
data class TaskEntity(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "task_id") val taskId: Int,
@ColumnInfo(name = "task_title") val taskTitle: String?,
@ColumnInfo(name = "task_desc") val taskDesc: String?,
@ColumnInfo(name = "task_priority") val taskPriority: Int?,
@ColumnInfo(name = "task_status") val taskStatus: String?,
@ColumnInfo(name = "task_time") val taskTime: String?,
@ColumnInfo(name = "task_notify") val taskNotify: String?
)
第二个:
data class SubtaskModel(
val subTasktitle : String?,
val subTaskStatus : Boolean?
)
我想在我的第一个数据模型 class 中添加一个字段作为下面的代码(最后一个字段):
@Entity(tableName = TABLE_TASK)
data class TaskEntity(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "task_id") val taskId: Int,
@ColumnInfo(name = "task_title") val taskTitle: String?,
@ColumnInfo(name = "task_desc") val taskDesc: String?,
@ColumnInfo(name = "task_priority") val taskPriority: Int?,
@ColumnInfo(name = "task_status") val taskStatus: String?,
@ColumnInfo(name = "task_time") val taskTime: String?,
@ColumnInfo(name = "task_notify") val taskNotify: String?,
@ColumnInfo(name = "task_subtask") val taskSubTask: MutableList<SubtaskModel>?
)
我遇到的错误:
Cannot figure out how to save this field into database. You can consider adding a type converter for it.
所以我阅读了(developer.android.com)并搜索了这个,但我不知道如何编写类型转换器。
谢谢
Follow below steps :
第一步。 : 创建转换器 class -
class MyConverter {
@TypeConverter
fun listToJson(value: List< SubtaskModel >?): String = Gson().toJson(value)
@TypeConverter
fun jsonToList(value: String) = Gson().fromJson(value, Array<SubtaskModel>::class.java).toList()
}
步骤 2 -> 将转换器添加到您的数据库 class
@Database(entities = [TaskEntity::class], version = 1)
@TypeConverters(MyConverter::class)
abstract class myDataBase : RoomDatabase() {
abstract fun myDao(): MyDao
}
就是这样。