如何在Android Jackson解析期间使用Android Lollipop中的注释修复IncompatibleClassChangeError? [英] How to fix IncompatibleClassChangeError during Android Jackson Parsing using annotations in Android Lollipop?

查看:238
本文介绍了如何在Android Jackson解析期间使用Android Lollipop中的注释修复IncompatibleClassChangeError?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我们的android应用中,我们在模型中使用Jackson注释:

In our android app, we use Jackson Annotations in our models:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "templateType", visible = true, defaultImpl = Default.class)
@JsonSubTypes({
@Type(value = Subclass1.class, name = "tType1")

我们使用对象映射器解析json响应,其中klass是我们希望解析为的目标文件的类: getObjectMapper().readValue(json, klass);

We parse the json response using object mapper where klass is the class of the object file which we wish to parse to: getObjectMapper().readValue(json, klass);

在Android Lollipop设备上的罕见情况下,我们得到

On rare scenarios on Android Lollipop devices, we get

java.lang.IncompatibleClassChangeError: Couldn't find com.fasterxml.jackson.annotation.JsonSubTypes$Type.value.

完整堆栈跟踪:

com.fasterxml.jackson.annotation.JsonSubTypes$Type.value
at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:659)
at java.lang.Class.getDeclaredAnnotations(Class.java:891)
at com.fasterxml.jackson.databind.introspect.AnnotatedClass.resolveClassAnnotations(AnnotatedClass.java:300)
at com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector.isIgnorableType(JacksonAnnotationIntrospector.java:103)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.isIgnorableType(BeanDeserializerFactory.java:844)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:401)
at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:305)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:151)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:634)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:438)
at com.fasterxml.jackson.databind.jsontype.impl.TypeDeserializerBase._findDeserializer(TypeDeserializerBase.java:173)
at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedForId(AsPropertyTypeDeserializer.java:99)
at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserializeWithType(AbstractDeserializer.java:106)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:464)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:98)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:295)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888)

推荐答案

这是某些三星设备上已确认的错误.不幸的是,目前还没有修复程序,但是这个Android Bug Tracker线程可能很快就会提供修复程序(如果可能):

This is a confirmed bug on some Samsung devices. Unfortunately there is no fix yet, but this Android Bug Tracker thread will probably come up with a fix (if possible) soon:

https://code.google.com/p/android/issues/detail?id = 172339

这篇关于如何在Android Jackson解析期间使用Android Lollipop中的注释修复IncompatibleClassChangeError?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆