Parcelable encountered IOException writing serializable object 解決方法
阿新 • • 發佈:2018-12-26
在往bundle中寫資料時報以下錯誤:
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object
有一個類A,繼承自Serializable,A有個物件a,A有個成員變數b,b的型別是OptionsButton。
public static abstract class OptionsButton implements Serializable { // 圖示drawable id public int iconId; // 響應事件 public abstract void onClick(Context context, View view, String sessionId); }
錯誤發生自把a往bundle中put的時候。
發現在類靜態方法中new OptionsButton並實現onClick的時候,不會報錯;而在類成員方法中new OptionsButton則會報上面錯誤,程式碼如下:
a.b = new SessionCustomization.OptionsButton() { @Override public void onClick(Context context, View view, String sessionId) { MessageInfoActivity.startActivity(context, sessionId); //開啟聊天資訊 } };
執行這兩段程式碼的外部類沒有繼承自Serializable。
結論:
在類成員方法中直接new class並實現方法相當於宣告非靜態內部類並實現響應的方法,會攜帶當前物件的引用。
因為外部類沒有整合自Serializable,在執行Bundle.putExtra時,因為變數b,整個物件會被當作Parcel型別的物件,導致與Serializable不匹配。