私は、ScheduleItem と Venue という 2 つの Parcelable クラスを作成しました。
ScheduleItem.java
public class ScheduleItem implements Parcelable {
private static final SimpleDateFormat FORMATTER = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss Z");
@SerializedName("start_date")
private Date mStartDate;
@SerializedName("end_date")
private Date mEndDate;
.............................
getter & setter
............................
private ScheduleItem(Parcel in) {
long[] lngData = new long[2];
in.readLongArray(lngData);
this.mStartDate = new Date(lngData[0]);
this.mEndDate = new Date(lngData[1]);
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel out, int flag) {
// TODO Auto-generated method stub
out.writeLongArray(new long[]{ this.mStartDate.getTime(), this.mEndDate.getTime()});
}
public static final Parcelable.Creator<ScheduleItem> CREATOR = new Parcelable.Creator<ScheduleItem>() {
public ScheduleItem createFromParcel(Parcel in) {
return new ScheduleItem(in);
}
public ScheduleItem[] newArray(int size) {
return new ScheduleItem[size];
}
};
}
会場.java
public class Venue implements Parcelable {
// Core fields
@SerializedName("id")
private long mId;
@SerializedName("pcode")
private int mPcode;
@SerializedName("longitude")
private double mLatitude;
@SerializedName("latitude")
private double mLongitude;
@SerializedName("name")
private String mName;
@SerializedName("address")
private String mAddress;
@SerializedName("city")
private String mCity;
@SerializedName("state")
private String mState;
@SerializedName("zip")
private String mZip;
@SerializedName("phone")
private String mPhone;
// Super Bowl venue fields
@SerializedName("tollfreephone")
private String mTollFreePhone;
private String mUrl;
@SerializedName("description")
private String mDescription;
@SerializedName("ticket_link")
private String mTicketLink;
@SerializedName("image_url")
private String mImageUrl;
@SerializedName("schedule")
private ArrayList<ScheduleItem> mSchedule = new ArrayList<ScheduleItem>();
// computed fields
private float mDistance;
.............................
getter & setter
............................
private Venue(Parcel in) {
this.mId = in.readLong();
this.mPcode = in.readInt();
double[] dbleData = new double[2];
in.readDoubleArray(dbleData);
this.mLatitude = dbleData[0];
this.mLongitude = dbleData[1];
String[] strData = new String[11];
in.readStringArray(strData);
this.mName = strData[0];
this.mAddress = strData[1];
this.mCity = strData[2];
this.mState = strData[3];
this.mZip = strData[4];
this.mPhone = strData[5];
this.mTollFreePhone = strData[6];
this.mUrl = strData[7];
this.mDescription = strData[8];
this.mTicketLink = strData[9];
this.mImageUrl = strData[10];
this.mDistance = in.readFloat();
List<ScheduleItem> tempSchedule = new ArrayList<ScheduleItem>();
in.readList(tempSchedule, null);
this.mSchedule = new ArrayList<ScheduleItem>(tempSchedule);
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
// TODO Auto-generated method stub
out.writeLong(this.mId);
out.writeInt(this.mPcode);
out.writeDoubleArray(new double[]{ this.mLatitude, this.mLongitude});
out.writeStringArray(new String[] { this.mName, this.mAddress,
this.mCity, this.mState, this.mZip, this.mPhone,
this.mTollFreePhone, this.mUrl, this.mDescription,
this.mTicketLink, this.mImageUrl });
out.writeFloat(this.mDistance);
out.writeList((List) this.mSchedule);
}
public static final Parcelable.Creator<Venue> CREATOR = new Parcelable.Creator<Venue>() {
public Venue createFromParcel(Parcel in) {
return new Venue(in);
}
public Venue[] newArray(int size) {
return new Venue[size];
}
};
public String toString(){
return getName();
}
}
ここで、インテントを介してフラグメントから次のアクティビティに渡したいと思います。
Intent intent = new Intent();
intent.setClass(getActivity(), VenueDetailsActivity.class);
intent.putExtra("venueDetails", selectedVenue); //selectedVenue is a object of Venue
startActivity(intent);
新しいアクティビティでは、
会場 mSelectedVenue = (会場) getIntent().getParcelableExtra( "venueDetails");
ArrayListmSchedule
のサイズがゼロの場合、正常に動作しています。しかし、それ以外の場合は投げていますandroid.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.ks.model.ScheduleItem
私のコードの問題は何ですか?