Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
I'm having the famous
BadParcelableException
, but I can't see where is the problem, here is my
Parcelable
class:
public class PaymentInfoViewModel implements Parcelable {
private long idEstablishment;
private String nameEstablishment;
private int cardNumber;
private double cardTotalValue;
private String cardTotalValueDesc;
private byte tipPercentage;
public PaymentInfoViewModel() {
private static final Parcelable.Creator<PaymentInfoViewModel> CREATOR = new Parcelable.Creator<PaymentInfoViewModel>() {
@Override
public PaymentInfoViewModel createFromParcel(Parcel source) {
return new PaymentInfoViewModel(source);
@Override
public PaymentInfoViewModel[] newArray(int size) {
return new PaymentInfoViewModel[size];
@Override
public int describeContents() {
return 0;
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(idEstablishment);
dest.writeString(nameEstablishment);
dest.writeInt(cardNumber);
dest.writeDouble(cardTotalValue);
dest.writeString(cardTotalValueDesc);
dest.writeByte(tipPercentage);
public PaymentInfoViewModel(Parcel source) {
setIdEstablishment(source.readLong());
setNameEstablishment(source.readString());
setCardNumber(source.readInt());
setCardTotalValue(source.readDouble());
setCardTotalValueDesc(source.readString());
setTipPercentage(source.readByte());
//getters/setters
It's put here, inside my adapter on event click:
PaymentInfoViewModel p = new PaymentInfoViewModel();
p.setIdEstablishment(item.getIdEstablishment());
p.setNameEstablishment(item.getName());
p.setTipPercentage((byte)0);
p.setCardTotalValueDesc("");
p.setCardTotalValue(0);
p.setCardNumber(0);
Intent intent = new Intent(context, CardNumberActivity.class);
intent.putExtra(ConstantsUtils.PARAM_INTENT_PAYMENT_INFO, p);
context.startActivity(intent);
And how I'm trying to get the class:
PaymentInfoViewModel paymentInfoViewModel = getIntent().getParcelableExtra(ConstantsUtils.PARAM_INTENT_PAYMENT_INFO);
I have previously checked these links, but I couldn't find a solution:
Parcelable protocol requires a Parcelable.Creator object called CREATOR (I do have CREATOR)
Error While Passing An Object From An Activity To Another (Using Parcelable)
Edit:
And here goes the error (it happens when I try to getParcelableExtra
):
FATAL EXCEPTION: main
Process: br.com.soutsapp.Souts_v3, PID: 19841
java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.soutsapp.Souts_v3/br.com.soutsapp.Souts_v3.view.activity.CardNumberActivity}: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class br.com.soutsapp.Souts_v3.model.viewModel.PaymentInfoViewModel
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class br.com.soutsapp.Souts_v3.model.viewModel.PaymentInfoViewModel
at android.os.Parcel.readParcelableCreator(Parcel.java:2436)
at android.os.Parcel.readParcelable(Parcel.java:2358)
at android.os.Parcel.readValue(Parcel.java:2264)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2614)
at android.os.BaseBundle.unparcel(BaseBundle.java:221)
at android.os.Bundle.getParcelable(Bundle.java:786)
at android.content.Intent.getParcelableExtra(Intent.java:5377)
at br.com.soutsapp.Souts_v3.view.activity.CardNumberActivity.onCreate(CardNumberActivity.java:30)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
If you do not know it already, you could be interested in the Parceler library (though you already solved your problem by now): https://github.com/johncarl81/parceler
(I'd comment if I had the reputation)
In My Case
I just simply remove my old Parcelable interface code
and implement new Parcelable Interface code.
and it work for me..
*Edit
Make sure your Parcelable class is static.
My Model Class
public class AccountModel implements Parcelable {
private BigDecimal amount;
private int icon;
private String name;
private long id;
private BigDecimal initial;
public AccountModel() {
this.id = new Date().getTime();
this.name = "Untitled";
BigDecimal bigDecimal = BigDecimal.ZERO;
this.amount = bigDecimal;
this.initial = bigDecimal;
this.icon = R.drawable.ic_card;
public AccountModel(BigDecimal amount, int icon, String name, long id, BigDecimal initial) {
this.amount = amount;
this.icon = icon;
this.name = name;
this.id = id;
this.initial = initial;
public AccountModel( int icon, String name, long id, BigDecimal initial) {
this.icon = icon;
this.name = name;
this.id = id;
this.initial = initial;
public AccountModel(long j, String str, BigDecimal bigDecimal, BigDecimal bigDecimal2, int i) {
this.id = j;
this.name = str;
this.amount = bigDecimal;
this.initial = bigDecimal2;
this.icon = i;
public AccountModel(BigDecimal initial, String name, int icon)
this.initial = initial;
this.name = name;
this.icon = icon;
protected AccountModel(Parcel in) {
this.id = in.readLong();
this.name = in.readString();
this.amount = BigDecimal.valueOf(Double.parseDouble(in.readString()));
this.initial = BigDecimal.valueOf(Double.parseDouble(in.readString()));
this.icon = in.readInt();
public static final Creator<AccountModel> CREATOR = new Creator<AccountModel>() {
@Override
public AccountModel createFromParcel(Parcel in) {
return new AccountModel(in);
@Override
public AccountModel[] newArray(int size) {
return new AccountModel[size];
@Override
public int describeContents() {
return 0;
public static AccountModel newCopyOf(AccountModel account) {
return new AccountModel(account.getId(), account.getName(), account.getAmount(), account.getInitial(), account.getIcon());
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(this.id);
dest.writeString(this.name);
dest.writeString(String.valueOf(this.amount));
dest.writeString(String.valueOf(this.initial));
dest.writeInt(this.icon);
public BigDecimal getAmount() {
return amount;
public void setAmount(BigDecimal amount) {
this.amount = amount;
public int getIcon() {
return icon;
public void setIcon(int icon) {
this.icon = icon;
public String getName() {
return name;
public void setName(String name) {
this.name = name;
public long getId() {
return id;
public void setId(long id) {
this.id = id;
public BigDecimal getInitial() {
return initial;
public void setInitial(BigDecimal initial) {
this.initial = initial;
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.