我试图将Address存储在HashMap中,但是编译器给出错误: 无法弄清楚如何将该字段保存到数据库中。您可以考虑为其添加类型转换器。私有java.util.HashMap地址;
error:
Cannot figure out how to save this field into database. You can consider adding a type converter for it. private java.util.HashMap<java.lang.String, java.lang.String> address;
我正在使用MapTypeConverter,但是它不起作用
object MapTypeConverter {
@TypeConverter
@JvmStatic
fun stringToMap(value: JsonElement): Map<String, String> {
return Gson().fromJson(value, object : TypeToken<Map<String, String>>() {}.type)
}
@TypeConverter
@JvmStatic
fun mapToString(value: Map<String, String>?): String {
return if(value == null) "" else Gson().toJson(value)
}
}
房间实体
@Entity
data class User(
var ownerName: String? = null,
var shopNumber: String? = null,
var deviceToken: String? = null,
var altNumber: String? = null,
var address: Map<String, String>? = null
) {
@PrimaryKey(autoGenerate = false)
var uId: String = "NA"
}
App数据库
@Database(
entities = [User::class,ProductDetails::class,CategoryDetails::class],
version = 1
)
@TypeConverters(ConverterListToString::class,MapTypeConverter::class)
abstract class AppDatabase : RoomDatabase(){
abstract fun getUserDao(): UserDao
abstract fun getProductDao(): ProductDao
abstract fun getCategoryDao(): CategoryDao
companion object{
@Volatile
private var instance: AppDatabase? = null
private val LOCK = Any()
operator fun invoke(context: Context) = instance ?: synchronized(LOCK){
instance ?: buildAppDataBase(context).also {
instance = it
}
}
private fun buildAppDataBase(context: Context) =
Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"TradersDatabase.db"
).build()
}
}
答案 0 :(得分:0)
您需要将转换后的内容添加到您的entity
@Entity
data class User(
var ownerName: String? = null,
var shopNumber: String? = null,
var deviceToken: String? = null,
var altNumber: String? = null,
@TypeConverters(MapTypeConverter::class)
var address: Map<String, String>? = null
) {
@PrimaryKey(autoGenerate = false)
var uId: String = "NA"
}
您需要在JsonElement
函数中将String
更改为stringToMap
希望这对您有所帮助。
答案 1 :(得分:0)
使用String
代替JsonElement
object MapTypeConverter {
@TypeConverter
@JvmStatic
fun stringToMap(value: String): Map<String, String> {
return Gson().fromJson(value, object : TypeToken<Map<String, String>>() {}.type)
}
@TypeConverter
@JvmStatic
fun mapToString(value: Map<String, String>?): String {
return if(value == null) "" else Gson().toJson(value)
}
}
您的Entity
应该是这样
@Entity
data class User(
var ownerName: String? = null,
var shopNumber: String? = null,
var deviceToken: String? = null,
var altNumber: String? = null,
@TypeConverters(MapTypeConverter::class)
var address: Map<String, String>? = null
) {
@PrimaryKey(autoGenerate = false)
var uId: String = "NA"
}