我有一个像的模型

@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
)

我的问题是,当我尝试插入数据库时​​,没有显示任何错误,但是当我执行“get”操作时,总是返回一个空值。因此,可能是我的问题出在“转换器”上,但我不确定。

这是我的转换器
class mapConverter {
    @TypeConverter
    fun fromString(value: String): Map<String, Rates> {
        val mapType = object : TypeToken<Map<String, Rates>>() {

        }.type
        return Gson().fromJson(value, mapType)
    }

    @TypeConverter
    fun fromStringMap(map: Map<String, Rates>): String {
        val gson = Gson()
        return gson.toJson(map)
    }
}

DAO
@Dao
abstract class RatesDao {

    @Query("SELECT * FROM allrates")
    abstract fun loadRates(): LiveData<Data>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    abstract fun insertRates(rates: Data)
}

与ROOM的连接
@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
}

最佳答案

您正在用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)
    }

}

关于android - Android ROOM保存Map <String,Object>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54978981/

10-08 22:31
查看更多