相关疑难解决方法(0)

活动开始期间可序列化类的ClassNotFoundException

安装程序

我有一个只覆盖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);
    }
Run Code Online (Sandbox Code Playgroud)

MyClass最初是activity类中的内部类,但是对于调试,我甚至将它移动到一个单独的文件中:

public class MyClass implements Serializable {
    private static final long serialVersionUID = 0x98ED2F00;
     ....
}
Run Code Online (Sandbox Code Playgroud)

步骤:

  1. 以通常的方式启动程序,运行正常.
  2. 单击主页按钮返回启动器.
  3. 从Eclipse中,从"设备"面板停止该过程
  4. 从Launcher再次启动程序,这次我得到以下内容:

    java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.Reports}:java.lang.RuntimeException Parcelable遇到ClassNotFoundException读取可序列化对象{name = com.example.MyClass}

    引起:java.lang.ClassNotFoundException:加载器dalvik.System.PathClassLoader [.]中的com.examp.MyClass

线索和观察:

  1. 最重要的线索是:如果我没有在onSaveInstanceState()中保存myObj,那么一切都很好.并且,将任何原始类型放入Bundle中都很好,但不是我的对象.

  2. 异常抛出我的代码之外,它发生在onCreate()和onResume()之间.它发生在Android内部.

  3. 错误消息中的类名是正确的:com.example.MyClass.最初它是活动内部的一个内部类,但是为了隔离问题,我把它移到一个单独的文件中,但无济于事.

  4. 我相信Serializable的实现是正确的,因为它可以序列化到程序的其他部分的文件中.

有没有人知道这可能的原因?非常感激!(对不起,我不能在这里放置详细的代码,因为一切都在这里和那里交织在一起.我只能尽可能地隔离.)

android

5
推荐指数
1
解决办法
3269
查看次数

标签 统计

android ×1