Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
泛型java.time属性的Jackson序列化在Android API 21上不起作用(但在29上起作用)_Java_Android_Jackson - Fatal编程技术网

泛型java.time属性的Jackson序列化在Android API 21上不起作用(但在29上起作用)

泛型java.time属性的Jackson序列化在Android API 21上不起作用(但在29上起作用),java,android,jackson,Java,Android,Jackson,我正在使用新的Android Studio 4.0 desugaring功能来使用java.time库,直到API 21。可悲的是,我有一个奇怪的错误,我并不真正理解。它发生在序列化具有类型为LocalDate的属性的对象时(这与LocalDateTime相同,我假设它适用于所有java.time类) 据我所知,我可以序列化单个LocalDate对象,我可以序列化具有LocalDate类型属性的对象,但我不能序列化具有LocalDate泛型类型的对象 这是我的测试代码: 公共静态抽象类Where

我正在使用新的Android Studio 4.0 desugaring功能来使用
java.time
库,直到API 21。可悲的是,我有一个奇怪的错误,我并不真正理解。它发生在序列化具有类型为
LocalDate
的属性的对象时(这与
LocalDateTime
相同,我假设它适用于所有
java.time
类)

据我所知,我可以序列化单个
LocalDate
对象,我可以序列化具有
LocalDate
类型属性的对象,但我不能序列化具有
LocalDate
泛型类型的对象

这是我的测试代码:

公共静态抽象类WhereTest{
公共V V;
}
公共静态类T1扩展测试{
}
公共静态类T2{
public LocalDate l=LocalDate.now();
}
ObjectMapper ObjectMapper=new ObjectMapper();
字符串json=objectMapper.writeValueAsString(LocalDate.now());
System.out.println(“--test--json字符串:“+json”);
json=objectMapper.writeValueAsString(新的T2());
System.out.println(“--test--json字符串:“+json”);
json=objectMapper.writeValueAsString(新的T1());
System.out.println(“--test--json字符串:“+json”);
在我的API 29仿真器上,它工作正常,输出如下内容:

--test-- json string: {"chronology":{"calendarType":"iso8601","id":"ISO"},"dayOfMonth":22,"dayOfWeek":"MONDAY","dayOfYear":174,"era":"CE","month":"JUNE","monthValue":6,"year":2020,"leapYear":true}
--test-- json string: {"l":{"chronology":{"calendarType":"iso8601","id":"ISO"},"dayOfMonth":22,"dayOfWeek":"MONDAY","dayOfYear":174,"era":"CE","month":"JUNE","monthValue":6,"year":2020,"leapYear":true}}
--test-- json string: {"v":null}
但是,在我的API 21 emulator上,会发生以下情况:

--test-- json string: {"month":"JUNE","year":2020,"chronology":{"calendarType":"iso8601","id":"ISO"},"dayOfMonth":22,"dayOfWeek":"MONDAY","dayOfYear":174,"era":"CE","monthValue":6,"leapYear":true}
--test-- json string: {"l":{"month":"JUNE","year":2020,"chronology":{"calendarType":"iso8601","id":"ISO"},"dayOfMonth":22,"dayOfWeek":"MONDAY","dayOfYear":174,"era":"CE","monthValue":6,"leapYear":true}}
Shutting down VM
FATAL EXCEPTION: main
    Process: ..., PID: 6125
    java.lang.RuntimeException: Unable to start activity ComponentInfo{.../....MainActivity}: java.lang.TypeNotPresentException: Type java.time.LocalDateTime not present
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.TypeNotPresentException: Type java.time.LocalDateTime not present
        at libcore.reflect.ParameterizedTypeImpl.getRawType(ParameterizedTypeImpl.java:67)
        at libcore.reflect.ParameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:76)
        at libcore.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:70)
        at libcore.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:55)
        at libcore.reflect.ParameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:75)
        at libcore.reflect.Types.getType(Types.java:56)
        at java.lang.Class.getGenericSuperclass(Class.java:1161)
        at com.fasterxml.jackson.databind.util.ClassUtil.getGenericSuperclass(ClassUtil.java:1204)
        at com.fasterxml.jackson.databind.type.TypeFactory._resolveSuperClass(TypeFactory.java:1416)
        at com.fasterxml.jackson.databind.type.TypeFactory._fromClass(TypeFactory.java:1379)
        at com.fasterxml.jackson.databind.type.TypeFactory._fromAny(TypeFactory.java:1284)
        at com.fasterxml.jackson.databind.type.TypeFactory.constructType(TypeFactory.java:698)
        at com.fasterxml.jackson.databind.cfg.MapperConfig.constructType(MapperConfig.java:306)
        at com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:518)
        at com.fasterxml.jackson.databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:799)
        at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:308)
        at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:4374)
        at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3629)
        at ....MainActivity.onCreate(MainActivity.java:47)
        at android.app.Activity.performCreate(Activity.java:5937)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
        at android.app.ActivityThread.access$800(ActivityThread.java:144) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5221) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
     Caused by: java.lang.ClassNotFoundException: java.time.LocalDateTime
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:308)
        at libcore.reflect.ParameterizedTypeImpl.getRawType(ParameterizedTypeImpl.java:65)
        at libcore.reflect.ParameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:76) 
        at libcore.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:70) 
        at libcore.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:55) 
        at libcore.reflect.ParameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:75) 
        at libcore.reflect.Types.getType(Types.java:56) 
        at java.lang.Class.getGenericSuperclass(Class.java:1161) 
        at com.fasterxml.jackson.databind.util.ClassUtil.getGenericSuperclass(ClassUtil.java:1204) 
        at com.fasterxml.jackson.databind.type.TypeFactory._resolveSuperClass(TypeFactory.java:1416) 
        at com.fasterxml.jackson.databind.type.TypeFactory._fromClass(TypeFactory.java:1379) 
        at com.fasterxml.jackson.databind.type.TypeFactory._fromAny(TypeFactory.java:1284) 
        at com.fasterxml.jackson.databind.type.TypeFactory.constructType(TypeFactory.java:698) 
        at com.fasterxml.jackson.databind.cfg.MapperConfig.constructType(MapperConfig.java:306) 
        at com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:518) 
        at com.fasterxml.jackson.databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:799) 
        at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:308) 
        at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:4374) 
        at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3629) 
        at ....MainActivity.onCreate(MainActivity.java:47) 
        at android.app.Activity.performCreate(Activity.java:5937) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
        at android.app.ActivityThread.access$800(ActivityThread.java:144) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5221) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
     Caused by: java.lang.ClassNotFoundException: Didn't find class "java.time.LocalDateTime" on path: DexPathList[[zip file "/data/app/...-1/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
        at java.lang.Class.classForName(Native Method) 
        at java.lang.Class.forName(Class.java:308) 
        at libcore.reflect.ParameterizedTypeImpl.getRawType(ParameterizedTypeImpl.java:65) 
        at libcore.reflect.ParameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:76) 
        at libcore.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:70) 
        at libcore.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:55) 
        at libcore.reflect.ParameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:75) 
        at libcore.reflect.Types.getType(Types.java:56) 
        at java.lang.Class.getGenericSuperclass(Class.java:1161) 
        at com.fasterxml.jackson.databind.util.ClassUtil.getGenericSuperclass(ClassUtil.java:1204) 
        at com.fasterxml.jackson.databind.type.TypeFactory._resolveSuperClass(TypeFactory.java:1416) 
        at com.fasterxml.jackson.databind.type.TypeFactory._fromClass(TypeFactory.java:1379) 
        at com.fasterxml.jackson.databind.type.TypeFactory._fromAny(TypeFactory.java:1284) 
        at com.fasterxml.jackson.databind.type.TypeFactory.constructType(TypeFactory.java:698) 
        at com.fasterxml.jackson.databind.cfg.MapperConfig.constructType(MapperConfig.java:306) 
        at com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:518) 
        at com.fasterxml.jackson.databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:799) 
        at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:308) 
        at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:4374) 
        at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3629) 
        at ....MainActivity.onCreate(MainActivity.java:47) 
        at android.app.Activity.performCreate(Activity.java:5937) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
        at android.app.ActivityThread.access$800(ActivityThread.java:144) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5221) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
        Suppressed: java.lang.ClassNotFoundException: java.time.LocalDateTime
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
                ... 35 more
     Caused by: java.lang.NoClassDefFoundError: 
my app level build.gradle中的重要部分包括:

compileOptions {
    coreLibraryDesugaringEnabled true
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
dependencies {
    implementation 'androidx.multidex:multidex:2.0.1'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.0'
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.5'
}
在我的项目级build.gradle中:

buildscript {
    dependencies {
        classpath 'com.android.tools.build:gradle:4.0.0'
    }
}
注意(不确定是否需要):在
AndroidManifest
中,
应用程序具有
android:name=“androidx.multidex.MultiDexApplication”