我有一个MutableMap<CryptoTypes, CurrentTradingInfo>
我想保存在onSaveInstanceState
并准备使用Moshi来回转换。CryptoTypes is an ENUM
private var tickerData: MutableMap<CryptoTypes, CurrentTradingInfo> = mutableMapOf()
fun convertTickerDataJson(): String {
val moshi = Moshi.Builder().build()
val jsonAdapter = moshi.adapter<MutableMap<CryptoTypes, CurrentTradingInfo>>(MutableMap::class.java)
return jsonAdapter.toJson(tickerData)
}
fun restoreTickerDataFromJson(data: String) {
val moshi = Moshi.Builder().build()
val jsonAdapter = moshi.adapter<MutableMap<CryptoTypes, CurrentTradingInfo>>(MutableMap::class.java)
tickerData = jsonAdapter.fromJson(data)
}
数据序列化正确,但是当它被反序列化时,它给我返回一个MutableMap<String, CurrentTradingInfo>
反而?
当我在序列化之前在工作室中查看我的tickerData映射时,它显然将ENUM存储为ENUM
这是反序列化后的地图[注意地图是无序的,我必须再次重新运行它,因此地图键的顺序不同]
它如何能够给我返回一张输入错误的地图?难道我做错了什么?
当我尝试访问转换后的地图时,由于类型错误,它会崩溃并出现以下错误
Java.lang.ClassCastException: java.lang.String cannot be cast to com.nebulights.crytpotracker.CryptoTypes
如果我创建两个变量
private var tickerDataA: MutableMap<CryptoTypes, CurrentTradingInfo> = mutableMapOf()
private var tickerDataB: MutableMap<String, CurrentTradingInfo> = mutableMapOf()
我不能去tickerDataA = tickerDataB
,它显示为类型不匹配,并且不会让我按应有的方式进行编译。