Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android房间保存地图<;字符串,对象>;_Android_Kotlin_Android Room - Fatal编程技术网

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