【发布时间】:2018-09-21 10:53:39
【问题描述】:
我正在尝试将 Map<String, String> 存储到 Room 数据库。
Json 如下所示。
{
"version": 1,
"data": {
"en": {"name": "english"},
"ko": {"name": "korean"},
"de": {"name": "germany"}
}
}
实体如下所示。
@Entity
data class Translation(
@PrimaryKey(autoGenerate = true)
val version: Int,
@SerializedName("data")
@Embedded
val data: Data
) {
data class Data(
@SerializedName("en")
val english: Map<String, String>,
@SerializedName("ko")
val korean: Map<String, String>,
@SerializedName("de")
val german: Map<String, String>
)
}
Room Database 类是这样的。
@Database(
entities = [
Translation::class
],
version = 1,
exportSchema = false
)
@TypeConverters(ClassTypeConverter::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun translationDao(): TranslationDao
}
最后是ClassTypeConvert。
object MapTypeConverter {
@TypeConverter
fun stringToMap(value: JsonElement): Map<String, String> {
return Gson().fromJson(value, object : TypeToken<Map<String, String>>() {}.type)
}
@TypeConverter
fun mapToString(value: Map<String, String>?): String {
return if(value == null) "" else Gson().toJson(value)
}
}
但显示错误,
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> english = null;
这是将地图类型保存到房间数据库的错误方法吗?
【问题讨论】:
-
请为您提供 DAO 课程。可能问题是DAO类中的insert()方法没有@TypeConverters注解
-
您应该使用@TypeConverter 表示法在声明的成员变量(即数据变量)之上定义 TypeConverter。
标签: android android-room android-architecture-components typeconverter