Reputation: 941
I am getting BadParcelableException in my application on passing parcelable values using intent action. How to pass parcelable values and retrieve them in another classes?
Below is my code:
public MySample mySample;
public class MySample implements Parcelable {
private boolean galleryPicker = false;
private boolean gallery = false;
private ImageButton button;
private View view;
public ImageButton getButton() {
return button;
}
public void setPostButtonItem(ImageButton button) {
this.button= button;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringArray(new String[] {});
}
public int describeContents(){
return 0;
}
Intent action:
public class Popup// (Actually I call this class from my BaseActivity)
{
public Popup(Activity activity,ActionBar action)
{
MySample mySample= new MySample();
sample.data.setStatus=true;
no= (TextView) popupView.findViewById(R.id.no);
yes= (TextView) popupView.findViewById(R.id.yes);
mySample.gallery = true;
mySample.count = true;
context = getContext();
Intent intent = new Intent(context, NextActivity.class);
intent.putExtra("sample", mySample);
context.startActivity(intent);
}
}
Extract intent in another class:
private MySample mySample;
Bundle data = getIntent().getExtras();
this.mySample= data.getParcelable("sample");
Exception:
Caused by: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class
Upvotes: 1
Views: 981
Reputation: 175
Try this
public class MySample implements Parcelable {
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public MySample createFromParcel(Parcel in) {
return new MySample(in);
}
public MySample[] newArray(int size) {
return new MySample[size];
}
};
private boolean galleryPicker = false;
private boolean gallery = false;
public MySample(Parcel in) {
boolean[] temp = new boolean[2];
in.readBooleanArray(temp);
galleryPicker = temp[0];
gallery = temp[1];
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeBooleanArray(new boolean[]{galleryPicker, gallery});
}
}
Upvotes: 2