Android - MyParceableClassOuter 内的 MyParceableClassInner[]
Android - MyParceableClassInner[] inside MyParceableClassOuter
我试图在活动之间传递一个自定义 parceable class,其中包含另一个自定义 parceable class 的数组。我试着听从建议 here,但它对我不起作用。
这是内部 class,单独传递时它工作正常:
import android.os.Parcel;
import android.os.Parcelable;
public class EntryImage implements Parcelable {
public int imageId;
public int entryid_id;
public String url;
public int height;
public EntryImage(int imageId, int entryid_id, String url, int height) {
this.imageId = imageId;
this.entryid_id = entryid_id;
this.url = url;
this.height = height;
}
public EntryImage(Parcel in) {
readFromParcel(in);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(imageId);
parcel.writeInt(entryid_id);
parcel.writeString(url);
parcel.writeInt(height);
}
private void readFromParcel(Parcel in) {
imageId = in.readInt();
entryid_id = in.readInt();
url = in.readString();
height = in.readInt();
}
public static final Parcelable.Creator<EntryImage> CREATOR = new Parcelable.Creator<EntryImage>() {
public EntryImage createFromParcel(Parcel in) {
return new EntryImage(in);
}
public EntryImage[] newArray(int size) {
return new EntryImage[size];
}
};
}
这是外层class。问题出在 readFrom 和 writeToParcel 的最后几行:
import android.os.Parcel;
import android.os.Parcelable;
import java.util.Arrays;
public class Entry implements Parcelable {
public int entryId;
public String name;
public EntryImage[] images;
public Entry(int entryId, String name, EntryImage[] images) {
this.entryId = entryId;
this.name = name;
this.images = images;
}
public Entry(Parcel in) {
readFromParcel(in);
}
public EntryImage getEntryImage (int asdf) {
return images[asdf];
}
@Override
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(entryId);
parcel.writeString(name);
parcel.writeParcelableArray(images, flags);
}
private void readFromParcel(Parcel in) {
entryId = in.readInt();
name = in.readString();
//images = in.readTypedArray(EntryImage[].class.getClassLoader());
Parcelable[] parcelableArray = in.readParcelableArray(EntryImage.class.getClassLoader());
EntryImage[] images = null;
if (parcelableArray != null) {
images = Arrays.copyOf(parcelableArray, parcelableArray.length, EntryImage[].class);
}
}
public static final Parcelable.Creator<Entry> CREATOR = new Parcelable.Creator<Entry>() {
public Entry createFromParcel(Parcel in) {
return new Entry(in);
}
public Entry[] newArray(int size) {
return new Entry[size];
}
};
}
Entry.readFromParcel
中的行
EntryImage[] images = null;
应该是
images = null;
我试图在活动之间传递一个自定义 parceable class,其中包含另一个自定义 parceable class 的数组。我试着听从建议 here,但它对我不起作用。
这是内部 class,单独传递时它工作正常:
import android.os.Parcel;
import android.os.Parcelable;
public class EntryImage implements Parcelable {
public int imageId;
public int entryid_id;
public String url;
public int height;
public EntryImage(int imageId, int entryid_id, String url, int height) {
this.imageId = imageId;
this.entryid_id = entryid_id;
this.url = url;
this.height = height;
}
public EntryImage(Parcel in) {
readFromParcel(in);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(imageId);
parcel.writeInt(entryid_id);
parcel.writeString(url);
parcel.writeInt(height);
}
private void readFromParcel(Parcel in) {
imageId = in.readInt();
entryid_id = in.readInt();
url = in.readString();
height = in.readInt();
}
public static final Parcelable.Creator<EntryImage> CREATOR = new Parcelable.Creator<EntryImage>() {
public EntryImage createFromParcel(Parcel in) {
return new EntryImage(in);
}
public EntryImage[] newArray(int size) {
return new EntryImage[size];
}
};
}
这是外层class。问题出在 readFrom 和 writeToParcel 的最后几行:
import android.os.Parcel;
import android.os.Parcelable;
import java.util.Arrays;
public class Entry implements Parcelable {
public int entryId;
public String name;
public EntryImage[] images;
public Entry(int entryId, String name, EntryImage[] images) {
this.entryId = entryId;
this.name = name;
this.images = images;
}
public Entry(Parcel in) {
readFromParcel(in);
}
public EntryImage getEntryImage (int asdf) {
return images[asdf];
}
@Override
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(entryId);
parcel.writeString(name);
parcel.writeParcelableArray(images, flags);
}
private void readFromParcel(Parcel in) {
entryId = in.readInt();
name = in.readString();
//images = in.readTypedArray(EntryImage[].class.getClassLoader());
Parcelable[] parcelableArray = in.readParcelableArray(EntryImage.class.getClassLoader());
EntryImage[] images = null;
if (parcelableArray != null) {
images = Arrays.copyOf(parcelableArray, parcelableArray.length, EntryImage[].class);
}
}
public static final Parcelable.Creator<Entry> CREATOR = new Parcelable.Creator<Entry>() {
public Entry createFromParcel(Parcel in) {
return new Entry(in);
}
public Entry[] newArray(int size) {
return new Entry[size];
}
};
}
Entry.readFromParcel
中的行 EntryImage[] images = null;
应该是
images = null;