gson 如何在AndroidKotlin中保存Room Db中的自定义列表?

ftf50wuq  于 2022-11-06  发布在  Android
关注(0)|答案(1)|浏览(130)

我的模型类

@Entity(tableName = "Custome Tasks")
data class CustomeTask(
    @PrimaryKey(autoGenerate = true)
    val id: Long =  0,
    @NonNull
    val title: String,
    @NonNull
    @TypeConverters(DataConverter::class)
    val tasks: List<Task>
)

任务数据类

data class Task(
    val title : String ,
    val time : Int
)

注意:我在任务类中有一个字符串和整数。我认为这是一个挑战。我已经通过搜索谷歌使用了这个类型转换器

class DataConverter {

    @TypeConverter 
    fun fromOptionValuesList(tasks: 
       List<CustomeTask>?): String? {
        if (tasks == null) {
            return null
        }
        val gson = Gson()
        val type: Type = object :
            TypeToken<List<CustomeTask>?>() {}.type
        return gson.toJson(tasks, type)
    }

  @TypeConverter 
    fun toOptionValuesList(tasks: String?): List<CustomeTask>? {
        if (tasks == null) {
            return null
        }
        val gson = Gson()
        val type = object :
            TypeToken<List<CustomeTask>?>() {}.type
        return gson.fromJson(tasks, type)

  }
 }

我想把任务列表保存在表中。2怎么能这样做。

xlpyo6sf

xlpyo6sf1#

除了在DataConverter中传递的类之外,您所做的一切都是正确的。您传递的是CustomeTask类,它是实体数据类,而不是应该传递的Task类。只需在DataConverter中更新应该从CustomeTask转换为Task类的模型,您就可以开始了。

class DataConverter {

    @TypeConverter 
    fun fromOptionValuesList(tasks: 
       List<Task>?): String? {
        if (tasks == null) {
            return null
        }
        val gson = Gson()
        val type: Type = object :
            TypeToken<List<Task>?>() {}.type
        return gson.toJson(tasks, type)
    }

  @TypeConverter 
    fun toOptionValuesList(tasks: String?): List<Task>? {
        if (tasks == null) {
            return null
        }
        val gson = Gson()
        val type = object :
            TypeToken<List<Task>?>() {}.type
        return gson.fromJson(tasks, type)

  }
 }

相关问题