为什么这不可序列化?

时间:2013-03-06 14:06:59

标签: java android serialization

我使用以下代码获得NotSerializableException,我不知道原因:

private class Entry implements Serializable {
    public int mProgress, mReps;
    public int mDays;
    public String[] mEntry;

    public Entry() {
        mEntry = new String[2];
        mProgress = mReps = 0;
        mDays = 0;
    }
}

private HashMap<String,Entry> mEntries;

FileOutputStream fos = mApp.openFileOutput("FOO", Context.MODE_PRIVATE);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(mEntries);
os.close();

我发现上述4行之一发生的异常:

保存异常java.io.NotSerializableException:com.company.app.classname

1 个答案:

答案 0 :(得分:4)

我怀疑Entry是一个内部类,因此会引用“外部”类,这可能不是可序列化的。

尝试以下方法:

private static class Entry implements Serializable {
...
}

请注意static关键字。

编辑:

正如@Henrik指出的那样,查看确切的异常消息和堆栈跟踪通常会提供重要的线索。在这种情况下,异常显示了不可序列化的类的名称(com.company.app.classname),并且该类未在Entry类中引用,这使我怀疑这是一个内部类。