kotlin.native.concurrent.InvalidMutabilityException:KMMiOS中冻结kotlin.collections.HashMap@3ee0f08的突变尝试
我使用的是 Kotlin 1.5.10 和 ktor 1.6.0。
当我执行网络提取时
private suspend fun getHello(): Model.Result {
return httpClient.get("https://en.wikipedia.org/w/api.php?action=query&format=json&list=search&srsearch=multiplatform")
}
使用数据模型
object Model {
@Serializable
data class Result(val query: Query)
@Serializable
data class Query(val searchinfo: SearchInfo)
@Serializable
data class SearchInfo(val totalhits: Int)
}
Android 版本编译良好并响应
Result(query=Query(searchInfo=SearchInfo(totalhits=707)))
但是,当我在 iOS 中编译它时,它返回崩溃
RESPONSE https://en.wikipedia.org/w/api.php?action=query&format=json&list=search&srsearch=multiplatform failed with exception:
kotlin.native.concurrent.InvalidMutabilityException: mutation attempt of frozen kotlin.collections.HashMap@2566888
这个StackOverflow建议下载到1.3.10,但我不能这样做,因为 KMM 不会在我最新的 Android Studio 4.2.1 中编译。此外,我不将协程用于 commonMain 代码(仅在 Android 代码中)。
这个StackOverflow状态问题与Kodein,但我不使用Kodein。
注意:我的代码与https://www.youtube.com/watch?v=_Q62iJoNOfg相同,只是型号和 URL 不同。
任何人都可以建议我们如何解决这个问题?
回答
我在这里发现了一个问题https://github.com/Kotlin/kotlinx.serialization/issues/1450。
我尝试了一种解决方法,即useAlternativeNames = falseJson 序列化配置,然后它解决了我的问题
install(JsonFeature) {
val json = kotlinx.serialization.json.Json {
ignoreUnknownKeys = true
useAlternativeNames = false
}
serializer = KotlinxSerializer(json)
}
以上是kotlin.native.concurrent.InvalidMutabilityException:KMMiOS中冻结kotlin.collections.HashMap@3ee0f08的突变尝试的全部内容。
THE END
二维码