如何为 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
}

就是这样。