java.io.NotSerializableException


結果發現序列不成功非靜態內部類時的序列中,出現以下異常:

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

版權聲明:本文博主原創文章。博客,未經同意不得轉載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM