【问题标题】:storing Map in room database将地图存储在房间数据库中
【发布时间】:2021-04-28 16:01:22
【问题描述】:

我正在尝试将Map<String,String> 存储在我的 Room 数据库中。 所以我像这样创建了一个转换器类:

class HashMapConverter {

    @TypeConverter
    fun toHashMap(value: JsonElement): Map<String, String> =
        Gson().fromJson(value, object : TypeToken<Map<String, String>>() {}.type)

    @TypeConverter
    fun fromHashMap(value: Map<String, String>): String =
        Gson().toJson(value)


}

并像这样创建了我的数据库类:

@Database(
    entities = [TasksModel::class],
    version = 1, exportSchema = false
)
@TypeConverters( HashMapConverter::class,EnumConverters::class)
abstract class TasksDatabase : RoomDatabase() {
    abstract val tasksDAO: TasksDAO
}

这是我的任务模型:

@Entity(tableName = "Tasks")
data class TasksModel(
    @PrimaryKey
    @ColumnInfo
    val id: Int,

    @ColumnInfo
    val taskName: String,

    @ColumnInfo
    val date: Map<String, String>,

    @ColumnInfo
    val time: String?,

    @ColumnInfo
    val status: TaskStatus
)

我还有一个 Enum Converter 类可以正常工作。 但是当我将 HashMap 添加到我的数据库时,我收到以下错误:

Cannot figure out how to save this field into database. You can consider adding a type converter for it.
    private final java.util.Map<java.lang.String, java.lang.String> date = null;

这有什么问题?

【问题讨论】:

    标签: android kotlin android-room typeconverter


    【解决方案1】:

    我相信您的问题有点牵强附会。因为问题不在于如何保存字段,而在于如何提取字段。

    您将有一个 String(根据 fromHashMap TypeConverter)存储在数据库中,而投诉/问题是您试图将其提取为 toHashMap 函数中的>JsonElement。

    尝试使用:-

    @TypeConverter
    fun toHashMap(value: String): Map<String, String> = 
        Gson().fromJson(value, object : TypeToken<Map<String, String>>() {}.type)
    

    【讨论】:

    • 谢谢伙计。问题正是你所说的。
    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2021-10-21
    • 2021-01-22
    • 1970-01-01
    • 2021-10-31
    • 2023-02-22
    • 2018-01-09
    • 2020-05-20
    相关资源
    最近更新 更多