将地图存储在房间数据库中
storing Map in room database
我正在尝试将 Map<String,String>
存储在我的房间数据库中。
所以我创建了一个 Converter Class 就像这样:
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)
}
并像这样创建了我的数据库 class:
@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 class,它工作正常。
但是当我将 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;
这有什么问题?
我认为您的问题有点转移注意力。因为问题不在于如何保存字段,而在于如何提取字段。
您将在数据库中存储一个 String(根据 fromHashMap TypeConverter),而 complaint/issue 就是您正在尝试将其作为 JsonElement 在 toHashMap 函数中提取。
尝试使用:-
@TypeConverter
fun toHashMap(value: String): Map<String, String> =
Gson().fromJson(value, object : TypeToken<Map<String, String>>() {}.type)
我正在尝试将 Map<String,String>
存储在我的房间数据库中。
所以我创建了一个 Converter Class 就像这样:
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)
}
并像这样创建了我的数据库 class:
@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 class,它工作正常。 但是当我将 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;
这有什么问题?
我认为您的问题有点转移注意力。因为问题不在于如何保存字段,而在于如何提取字段。
您将在数据库中存储一个 String(根据 fromHashMap TypeConverter),而 complaint/issue 就是您正在尝试将其作为 JsonElement 在 toHashMap 函数中提取。
尝试使用:-
@TypeConverter
fun toHashMap(value: String): Map<String, String> =
Gson().fromJson(value, object : TypeToken<Map<String, String>>() {}.type)