나는 onSaveInstanceState
에 저장하고자하는 MutableMap<CryptoTypes, CurrentTradingInfo>
을 가지고 있으며 앞뒤로 변환하려면 Moshi를 사용할 것입니다. CryptoTypes is an ENUM
안드로이드의 Moshi Kotlin - ENUM이 MeralMap 키가 문자열로 변환 될 때 변환 됨
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을 저장하는 것 및 나는 다시 다시 실행하기 위해 다른 순서에 따라서지도 키]
방법이 잘못 입력 된지도를 돌려줘 할 수 있었다? 내가 뭔가 잘못하고 있는거야? 내가 tickerDataA = tickerDataB
을 갈 수 없어 두 변수
private var tickerDataA: MutableMap<CryptoTypes, CurrentTradingInfo> = mutableMapOf()
private var tickerDataB: MutableMap<String, CurrentTradingInfo> = mutableMapOf()
을 작성하는 경우
나는 그것이 유형부터 아래로 충돌지도 전환 후 액세스하려고
는 그것을Java.lang.ClassCastException: java.lang.String cannot be cast to com.nebulights.crytpotracker.CryptoTypes
잘못 형식 불일치로 보여 주므로 꼭 컴파일해야하지 않습니다.
해결해 줘서 고마워! 그렇다면 Moshi가 Map
당신은 타입 인자가 런타임 중에 사라지는 경향이 있다는 것을 기억해야합니다. 런타임 중에는 get()을 호출하는 동안 충돌이 발생해야합니다. – Kiskae
아! 그것은 물건을 깨끗이합니다. 매우 감사. – Ben987654