2015-01-07 84 views
0

上我在logcat的NotSerializableException Parcelable对象

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.mygame.GameFeedItem) 
... 
Caused by: java.io.NotSerializableException: com.mygame.StyledText 

这似乎是StyledText类是不可序列得到这个错误。我实现了Parcelable,这不够吗?

一些细节:

的GameFeedItem延伸FeedItem类,这是Parcelable和包含StyledText类型的字段。 GameFeedItem不会向类中添加任何数据,只有一些逻辑。

public class FeedItem implements Parcelable 
{ 
    public StyledText mainText; 
    ... 
    @Override 
    public void writeToParcel(Parcel dest, int flags) 
    { 
     dest.writeParcelable(mainText, flags); 
     ... 
    } 
} 

的StyledText类如下:

public class StyledText implements Parcelable 
{ 
    private static final String TEXT_STYLES_DELIMITER = ","; 
    public static final int NO_ID = -1; 

    public Long _id; 
    public String text; 
    public String textStyles; 

    public StyledText(String text, List<TextStyle> textStyles) 
    { 
     this.text = text; 
     setTextStyles(textStyles); 
    } 

    public StyledText(Parcel in) 
    { 
     long id = in.readLong(); 
     this._id = id == NO_ID ? null : id; 
     this.text = in.readString(); 
     this.textStyles = in.readString(); 
    } 

    @Override 
    public int describeContents() 
    { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(@NonNull Parcel dest, int flags) 
    { 
     dest.writeLong(_id == null ? NO_ID : _id); 
     dest.writeString(text); 
     dest.writeString(textStyles); 
    } 

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() 
    { 
     public StyledText createFromParcel(@NonNull Parcel in) 
     { 
      return new StyledText(in); 
     } 

     @NonNull 
     public StyledText[] newArray(int size) 
     { 
      return new StyledText[size]; 
     } 
    }; 
} 

回答

0

您需要实现Serializable接口。

+0

你的意思是添加公共类StyledText实现Parcelable,Serializable? – TpoM6oH

+0

是的,这正是我的意思。 –

+2

但是为什么它需要StyledText在我使用时可序列化。 writeParcelable()? – TpoM6oH