如何传递包含另一个可打包类列表的 Parcelable 类?

问题描述

我正在尝试将 Parcelable 类从一个活动传递到另一个活动。我是这样做的:

Intent intent = new Intent(ClosedChatActivity.this,AdminProfileActivity.class);intent.putExtra("adminProfile",adminProfile);
startActivity(intent);

然后像这样在另一个 Activity 中获取它:

adminProfile = (AdminProfile) getIntent().getExtras().getParcelable("adminProfile");

这是 AdminProfile 类和它内部的 WebLink 类:

public class AdminProfile implements Parcelable {
    public static final Creator<AdminProfile> CREATOR = new Creator<AdminProfile>() {
        @Override
        public AdminProfile createFromParcel(Parcel in) {
            return new AdminProfile(in);
        }

        @Override
        public AdminProfile[] newArray(int size) {
            return new AdminProfile[size];
        }
    };
    public Long idUser;
    public String name;
    public String professio;
    public String description;
    public List<WebLink> webLinks;
    public Long idOficina;

    protected AdminProfile(Parcel in) {
        idUser = in.readLong();
        name = in.readString();
        professio = in.readString();
        description = in.readString();
        webLinks = in.createTypedArrayList(WebLink.CREATOR);

        idOficina = in.readLong();
    }

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

    @Override
    public void writetoParcel(Parcel parcel,int i) {
        parcel.writeLong(idUser);
        parcel.writeString(name);
        parcel.writeString(professio);
        parcel.writeString(description);
        parcel.writeLong(idOficina);
        parcel.writeTypedList(webLinks);
    }
}
public class WebLink implements Parcelable {
    public static final Creator<WebLink> CREATOR = new Creator<WebLink>() {
        @Override
        public WebLink createFromParcel(Parcel in) {
            return new WebLink(in);
        }

        @Override
        public WebLink[] newArray(int size) {
            return new WebLink[size];
        }
    };
    public String name;
    public String url;

    protected WebLink(Parcel in) {
        name = in.readString();
        url = in.readString();
    }

    @Override
    public boolean equals(@Nullable Object obj) {
        WebLink webLink = (WebLink) obj;
        assert webLink != null;
        return this.name.equals(webLink.name) && this.url.equals(webLink.url);
    }

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

    @Override
    public void writetoParcel(Parcel parcel,int i) {
        parcel.writeString(name);
        parcel.writeString(url);
    }
}

当我拿到对象时,里面的两个字符串和我发送的不一样。这是为什么?

奇怪的是,我有一个 Parcelable 类,其中包含一个 AdminProfile,当发送该类时,它确实可以很好地发送包含 Weblinks 的内容,但是如果我只在某处发送一个 AdminProfile,它就会失败。

解决方法

在读写 Parcelable 类时,需要确保元素的顺序完全相同。

您正在编写 idOficina 后跟 WebLinks,但您以相反的顺序阅读它们。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...