Parcelable对象上的NotSerializableException

时间:2015-01-07 13:07:13

标签: android

我在logcat中得到了这个错误

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];
        }
    };
}

1 个答案:

答案 0 :(得分:0)

您需要实现Serializable。