问题描述
我正在尝试将 Parcelable 类从一个活动传递到另一个活动。我是这样做的:
Intent intent = new Intent(ClosedChatActivity.this,AdminProfileActivity.class);intent.putExtra("adminProfile",adminProfile);
startActivity(intent);
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
,但您以相反的顺序阅读它们。