如何解决java.lang.VerifyError:验证器被拒绝拒绝调用,预期 36 个参数寄存器,方法签名有 37 个或更多
当我试图解码一堆表示为字符串的 json 数据时,它崩溃并说:
java.lang.VerifyError: Verifier rejected class com.example.package.MySampleClass$$serializer: Failed to verify:
com.example.package.MySampleClass com.example.package.MySampleClass
$$serializer.deserialize(kotlinx.serialization.encoding.Decoder):
[0x1E18] Rejecting invocation,expected 36 argument registers,method signature has 37 or more (declaration of
'com.example.package.MySampleClass $$serializer' appears in
/data/data/com.example.package/code_cache/.overlay/base.apk/classes11.dex)
复制
val response = httpClient.get<HttpResponse>(ApiEndPoints.languages)
val result = response.readText()
val jsElement = Json.parsetoJsonElement(result)
val arr = (jsElement as JsonObject)["data"] as JsonArray
arr.forEach {
// I tried to use 3 different ways but all of them causes the same error.
val example1 = Json{ignoreUnkNownKeys = true}.decodeFromString<LanguageData>(it.toString())
// val example2 = Json.decodeFromJsonElement(LanguageData.serializer(),it)
// val example3 = Json.decodeFromJsonElement<LanguageData>(it)
}
@Serializable
data class LanguageData(
@SerialName("code")
val code: String,@SerialName("flag")
val flag: String,@SerialName("keys")
val keys: Keys,@SerialName("name")
val name: String
)
@Serializable
data class Keys(
@SerialName("AlertMessages")
val alertMessages: AlertMessages,@SerialName("Alerts")
val alerts: Alerts,@SerialName("SampleKey1")
val sampleKey1: SampleKey1,@SerialName("SampleKey2")
val sampleKey2: SampleKey2
...
@SerialName("MySampleClass")
val mySampleClass: MySampleClass
)
每个可序列化的类都有 200 多个字段。
附注
如果我使用 LanguageData
而不是 HttpResponse
预期行为 将 jsonString 响应解码为 LanguageData。 环境
- Kotlin 版本:1.4.31
- Kotlin 序列化库版本:1.1.0
- Kotlin 平台:JVM、本机
- Gradle 版本:4.2.0-beta06
更新 1.0
我已经删除了除 MySampleClass
之外的所有关键类,并且还从该类中删除了一堆字段(有 ~300,现在我只有 ~20 个字段),现在它可以工作了。
更新 1.1
用 Gson 和 moshi 尝试过,但它抛出了同样的错误。似乎不是 Kotlinx.serialization
库问题
Gson().fromJson(jsonString,MySampleClass::class.java)
val adapter: JsonAdapter<MySampleClass> = moshi.adapter(MySampleClass::class.java)
val result = adapter.fromJson(jsonString)
更新 2.0
问题出现在 Kotlin 数据类中,似乎 jvm
类构造函数最多可以接受 ~244 个字段,现在我已经用“sample”类更改了我的数据类,它使用 Gson
也可以工作尝试使用 reflection
进行我自己的解析并且它也有效,但是使用 Kotlinx.serialization
仍然会引发相同的错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。