gpt4 book ai didi

java - 带有可序列化对象的 IOException

转载 作者:搜寻专家 更新时间:2023-11-01 08:44:44 26 4
gpt4 key购买 nike

我遇到一个可序列化对象的问题,当我尝试反序列化它时会抛出 IOException。

异常信息是:

W/System.err( 5258): java.io.IOException: Serializable class must have a (ObjectInputStream in) constructor
W/System.err( 5258): at com.andryr.intervaltrainingtimer.c.a.a(Unknown Source)
W/System.err( 5258): at com.andryr.intervaltrainingtimer.data.Workout.a(Unknown Source)
W/System.err( 5258): at com.andryr.intervaltrainingtimer.EditWorkoutActivity.onCreate(Unknown Source)
W/System.err( 5258): at android.app.Activity.performCreate(Activity.java:4479)
W/System.err( 5258): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
W/System.err( 5258): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2041)
W/System.err( 5258): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
W/System.err( 5258): at android.app.ActivityThread.access$600(ActivityThread.java:134)
W/System.err( 5258): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
W/System.err( 5258): at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 5258): at android.os.Looper.loop(Looper.java:154)
W/System.err( 5258): at android.app.ActivityThread.main(ActivityThread.java:4624)
W/System.err( 5258): at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 5258): at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err( 5258): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
W/System.err( 5258): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
W/System.err( 5258): at dalvik.system.NativeStart.main(Native Method)

它之前有这个异常:

W/System.err( 5258): java.lang.NoSuchMethodException: <init> [class com.andryr.intervaltrainingtimer.c.a]
W/System.err( 5258): at java.lang.Class.getConstructorOrMethod(Class.java:460)
W/System.err( 5258): at java.lang.Class.getConstructor(Class.java:431)
W/System.err( 5258): at com.andryr.intervaltrainingtimer.c.a.a(Unknown Source)
W/System.err( 5258): at com.andryr.intervaltrainingtimer.data.Workout.a(Unknown Source)
W/System.err( 5258): at com.andryr.intervaltrainingtimer.EditWorkoutActivity.onCreate(Unknown Source)
W/System.err( 5258): at android.app.Activity.performCreate(Activity.java:4479)
W/System.err( 5258): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
W/System.err( 5258): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2041)
W/System.err( 5258): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
W/System.err( 5258): at android.app.ActivityThread.access$600(ActivityThread.java:134)
W/System.err( 5258): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
W/System.err( 5258): at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 5258): at android.os.Looper.loop(Looper.java:154)
W/System.err( 5258): at android.app.ActivityThread.main(ActivityThread.java:4624)
W/System.err( 5258): at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 5258): at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err( 5258): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
W/System.err( 5258): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
W/System.err( 5258): at dalvik.system.NativeStart.main(Native Method)

异常似乎是不言自明的,但事实并非如此。在我的 Serializable 类中,我确实有一个采用 ObjectInputStream 的构造函数,当我使用调试 key 编译它时,应用程序确实像一个魅力一样工作。当我在 Release模式下编译它时出现问题,所以我打赌这是 ProGuard 或类似问题。

最佳答案

尝试添加到您的混淆器规则中:

-keep class com.andryr.** { *; }

如果这不起作用,您可以尝试通过以下方式保留所有可序列化类的细节,例如默认构造函数和覆盖:

 -keepclassmembers class * implements java.io.Serializable {
public <init>(...);
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}

http://proguard.sourceforge.net/manual/examples.html#serializable

关于java - 带有可序列化对象的 IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29566424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com