結果發現序列不成功非靜態內部類時的序列中,出現以下異常:
java.io.NotSerializableException: com.tang.sharedpreferencesdemo.MainActivity
W/System.err( 2356): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)W/System.err( 2356): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
W/System.err( 2356): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
W/System.err( 2356): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
W/System.err( 2356): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
W/System.err( 2356): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
經查資料和分析知道:
假設一個可序列化的對象包括對某個不可序列化的對象的引用,那么整個序列化操作將會失敗,而且會拋出一個NotSerializableException.
非靜態內部類擁有對外部類的全部成員的全然訪問權限,包含實例字段和方法。為實現這一行為,非靜態內部類存儲着對外部類的實例的一個隱式引用。序列化時要求全部的成員變量是Serializable,如今外部的類並沒有implements Serializable,所以就拋出java.io.NotSerializableException異常。
解決的方法:
1.將內部類寫成靜態的
2.將內部類單獨寫一個.java檔 implements Serializable
版權聲明:本文博主原創文章。博客,未經同意不得轉載。