Android房间保存地图<;字符串,对象>;
我有一个这样的模型Android房间保存地图<;字符串,对象>;,android,kotlin,android-room,Android,Kotlin,Android Room,我有一个这样的模型 @Entity(tableName = "allrates") class Data( @ColumnInfo(name = "rates") @SerializedName("rates") @Expose var rates: Map<String, Rates>, @ColumnInfo(name = "start") @SerializedName("star
@Entity(tableName = "allrates")
class Data(
@ColumnInfo(name = "rates")
@SerializedName("rates")
@Expose
var rates: Map<String, Rates>,
@ColumnInfo(name = "start")
@SerializedName("start_at")
@Expose
var startDate: String,
@ColumnInfo(name = "end")
@SerializedName("end_at")
@Expose
var endDate: String,
@SerializedName("base")
@Expose
var base: String,
@PrimaryKey(autoGenerate = true)
var id: Int
)
您正在用Kotlin编写代码,因此将这一行@JvmStatic添加到MapConverter类中,如下所示:
class MapConverter {
@JvmStatic
@TypeConverter
fun fromString(value: String): Map<String, Rates> {
val mapType = object : TypeToken<Map<String, Rates>>() {}.type
return Gson().fromJson(value, mapType)
}
@TypeConverter
@JvmStatic
fun fromStringMap(map: Map<String, Rates>): String {
val gson = Gson()
return gson.toJson(map)
}
}
类映射转换器{
@JvmStatic
@类型转换器
趣味fromString(值:String):映射{
val mapType=object:TypeToken(){}.type
返回Gson().fromJson(值,映射类型)
}
@类型转换器
@JvmStatic
趣味fromStringMap(map:map):字符串{
val gson=gson()
返回gson.toJson(map)
}
}
显示如何插入到DB.edited的DAO中您是否将@TypeConverters({mapConverter.class})添加到数据类中?编辑:在kotlin中似乎应该是@TypeConverters({mapConverter::class})。是的,我补充道。我也放了文件也许问题出在你的课上?将其翻译为json可能是错误的?代码不起作用,甚至显示错误:只有命名对象和伴生对象中的成员可以用“@JvmStatic”注释
我想您必须将类
更改为对象
,以避免上述错误。
@Dao
abstract class RatesDao {
@Query("SELECT * FROM allrates")
abstract fun loadRates(): LiveData<Data>
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insertRates(rates: Data)
}
@Database(entities = [(Data::class)], version = 1, exportSchema = false)
@TypeConverters(mapConverter::class)
abstract class AppDatabase : RoomDatabase() {
companion object {
private var sInstance: AppDatabase? = null
private const val DATABASE_NAME: String = "RatesList"
fun getInstance(context: Context): AppDatabase {
if (sInstance == null) {
synchronized(AppDatabase::class) {
sInstance = Room.databaseBuilder(context.applicationContext,
AppDatabase::class.java, DATABASE_NAME)
.build()
}
}
return sInstance as AppDatabase
}
}
abstract fun ratesDao(): RatesDao
}
class MapConverter {
@JvmStatic
@TypeConverter
fun fromString(value: String): Map<String, Rates> {
val mapType = object : TypeToken<Map<String, Rates>>() {}.type
return Gson().fromJson(value, mapType)
}
@TypeConverter
@JvmStatic
fun fromStringMap(map: Map<String, Rates>): String {
val gson = Gson()
return gson.toJson(map)
}
}