设置
我有一个仅覆盖onCreate(),onResume()和onSaveInstanceState()的 Activity 。在onSaveInstanceState()中,我放入了一个可序列化的对象:
@Override
public void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(state);
state.putSerializable("obj", myObj); // myObj is of class MyClass state.putLong("long", longVar);
}
MyClass最初是 Activity 类内部的一个内部类,但是为了调试,我什至将其移至单独的文件中:
public class MyClass implements Serializable {
private static final long serialVersionUID = 0x98ED2F00;
....
}
步骤:
java.lang.RuntimeException:无法启动 Activity ComponentInfo {com.example.Reports}:java.lang.RuntimeException Parcelable在读取可序列化对象{name = com.example.MyClass}时遇到ClassNotFoundException
由以下原因引起:java.lang.ClassNotFoundException:加载程序dalvik.System.PathClassLoader [。]中的com.examp.MyClass。
线索和观察结果:
有人知道造成这种情况的任何可能原因吗?非常感激! (对不起,我无法在此处放置详细的代码,因为在这里和那里,一切都交织在一起。我只能尽可能地隔离。)
最佳答案
好的,我想我找到了解决此问题的方法。
事实证明,如果传递给onCreate()的savedInstanceState参数不为null,则必须反序列化该Bundle中包含的所有对象。我不知道为什么,但是这就是我摆脱问题的方式。最初,我在onCreate()中的代码具有的逻辑是,在某些情况下,我会忽略saveInstanceState。现在,我要做的是,只要它不为null,我就将所有内容反序列化,然后根据其他条件,决定是否使用它们。
到目前为止,它运行良好。但我不知道:
关于android - Activity 开始期间可序列化类的ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5252841/