【发布时间】:2012-02-11 03:34:06
【问题描述】:
设置
我有一个仅覆盖 onCreate()、onResume() 和 onSaveInstanceState() 的活动。在 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;
....
}
步骤:
- 以通常的方式启动程序,它运行良好。
- 单击主页按钮返回启动器。
- 在 Eclipse 中,从设备面板停止进程
-
从 Launcher 再次启动程序,这次我得到以下信息:
java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.example.Reports}: java.lang.RuntimeException Parcelable 遇到 ClassNotFoundException 读取可序列化对象 {name = com.example.MyClass}
原因:java.lang.ClassNotFoundException: com.examp.MyClass in loader dalvik.System.PathClassLoader[.]
线索和观察:
最重要的线索是:如果我不在onSaveInstanceState()中保存myObj,那么一切都很好。而且,将任何原始类型放入 Bundle 中都可以,但不是我的对象。
异常是在我的代码之外引发的,它发生在 onCreate() 和 onResume() 之间。它发生在 Android 内部。
错误信息中的类名正确:com.example.MyClass。本来是activity内部的一个内部类,但是为了隔离问题,我把它移到一个单独的文件中,没有用。
我相信 Serializable 的实现是正确的,因为它可以在程序的其他部分中序列化到文件或从文件序列化。
有人知道这可能是什么原因吗?非常感激! (抱歉这里不能放详细的代码,因为一切都在这里和那里交织在一起,我只能尽可能的隔离。)
【问题讨论】:
标签: android