onSaveInstanceState
に保存したいと思っているMutableMap<CryptoTypes, CurrentTradingInfo>
を持っていて、前後に変換するためにMoshiを使用しようとしていました。 CryptoTypes is an ENUM
AndroidのMoshi Kotlin - ENUMをMutableMapキーとして文字列に変換するときに文字列に変換する
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を格納していますこれは、バック直列化復元された後のマップで[マップが順不同であることに注意して私は、再びそれを再実行するために異なる順序で、したがってマップキー]
どのようにそれは間違って入力したマップを私にお返しすることができましたか?私は何か間違っているのですか?
私はタイプが私は2つの変数
private var tickerDataA: MutableMap<CryptoTypes, CurrentTradingInfo> = mutableMapOf()
private var tickerDataB: MutableMap<String, CurrentTradingInfo> = mutableMapOf()
を作成した場合、私はtickerDataA = tickerDataB
を行くことができない
Java.lang.ClassCastException: java.lang.String cannot be cast to com.nebulights.crytpotracker.CryptoTypes
間違っているので、それは以下でクラッシュマップポスト変換にアクセスしようと、それは型の不一致として表示され、私はそれをコンパイルする必要はありません。
解決しました。ありがとうございました!それはMoshiがMap
実行時に型引数が消える傾向があることを覚えておく必要があります。ランタイム中に 'get()'などを呼び出す間にクラッシュが発生する必要があります。 – Kiskae
ああ!それは物事をクリアする。とても有難い。 – Ben987654