Parcelable类抛出运行时异常解组未知类型

时间:2018-03-12 19:03:43

标签: android parcelable

我正在研究一个Android项目并尝试使用Parcelable,因此我可以将bundle中的类对象解析为另一个activity。

以下是我的课程

public class GroupAndItems implements Parcelable
{


    public String group;
    public List<String> items;

    public GroupAndItems(String group, List<String> items)
    {
        this.group = group;
        this.items = items;
    }

    public GroupAndItems(Parcel in)
    {
        this.group = in.readString();
        this.items = new ArrayList<>();
        in.readList(this.items, null);
    }

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

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeList(items);
        parcel.writeString(group);
    }

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator<GroupAndItems>() {

        @Override
        public GroupAndItems createFromParcel(Parcel parcel) {
            return new GroupAndItems(parcel);
        }

        @Override
        public GroupAndItems[] newArray(int i) {
            return new GroupAndItems[i];
        }
    };
}

我将ArrayList<GroupAndItems> groupAndItemsList放入捆绑包中,其意图如下

bundle = new Bundle();
bundle.putParcelableArrayList("groupsAndItems", groupAndItemsList);

Intent intent = new Intent(getContext(), GroupedSpinnerItems.class);
intent.putExtras(bundle);
getContext().startActivity(intent);

在我传递parcelable类的活动中,我使用以下内容检索它:

bundle = getIntent().getExtras();
        if (bundle != null)
        {
ArrayList<GroupAndItems> groupAndItems = bundle.getParcelableArrayList("groupsAndItems");
        }

然后我得到以下异常

java.lang.RuntimeException: Parcel android.os.Parcel@5620ba2: Unmarshalling unknown type code 7143525 at offset 176

就行了

in.readList(this.items, null);在我的parcelable类的构造函数中,以Parcel in为参数。

1 个答案:

答案 0 :(得分:1)

public GroupAndItems(Parcel in)
    {

        this.items = new ArrayList<>();
        in.readList(this.items, null);
        this.group = in.readString();
    }

@Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeList(items);
        parcel.writeString(group);
    }

您首先在GroupAndItems(Parcel in)中读取字符串,但是您首先在writeToParcel(Parcel parcel, int i)中编写List,您必须始终以相同的顺序执行该操作,例如,如果您编写String然后List,则应该读取String然后List