0

次のコードで 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

4

1 に答える 1

4

これEntryは内部クラスであると思われるため、おそらくシリアル化できない「外部」クラスへの参照があります。

次のことを試してください。

private static class Entry implements Serializable {
...
}

staticキーワードに注意してください。

編集:

@Henrikが指摘しているように、正確な例外メッセージとスタックトレースを見ると、重要な手がかりが得られることがよくあります。この場合、例外はシリアル化できないクラスの名前を示しており(com.company.app.classname)、そのクラスはクラスで参照されていないためEntry、これが内部クラスであると思われました。

于 2013-03-06T14:13:46.123 に答える