Search code examples
android-studioandroid-intentarraylistparcelable

issues with parcelable extension: getting unmarshalling unknown type code exception


long story short, I have one settlementItemeBase class as my father and two children. I want to make the father class parcelable so as extension happens, my two child classes be parcelable as well. I don't exactly know what I'm doing right or wrong. I searched little bit but nothing helped me. here are my classes:

SettlementItemBase:

public class SettlementItemBase implements Parcelable{

public SettlementItemBase(){}

protected SettlementItemBase(Parcel in) {
}

public static final Creator<SettlementItemBase> CREATOR = new Creator<SettlementItemBase>() {
    @Override
    public SettlementItemBase createFromParcel(Parcel in) {
        return new SettlementItemBase(in);
    }

    @Override
    public SettlementItemBase[] newArray(int size) {
        return new SettlementItemBase[size];
    }
};

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
}
}

first child class:

public class FirstClass extends SettlementItemBase {
private int id;
private int cardId;
private String cardNumber;
private String expDate;
private String currency;
private String url;

public FirstClass(){
    id = 0;
    cardId = 0;
    cardNumber = "";
    expDate = "";
    currency = "";
    url = "";
}

protected FirstClass(Parcel in) {
    super(in);
    id = in.readInt();
    cardId = in.readInt();
    cardNumber = in.readString();
    expDate = in.readString();
    currency = in.readString();
    url = in.readString();
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(id);
    dest.writeInt(cardId);
    dest.writeString(cardNumber);
    dest.writeString(expDate);
    dest.writeString(currency);
    dest.writeString(url);
}

public int getId() {
    return id;
}

public int getCardId() {
    return cardId;
}

public String getCardNumber() {
    return cardNumber;
}

public String getExpDate() {
    return expDate;
}

public String getCurrency() {
    return currency;
}

public String getUrl() {
    return url;
}
}

second child class:

public class SecondClass extends SettlementItemBase{
private int id;
private String currency;
private String accountNumber;
private String ibanNumber;

public SecondClass(int id, String currency,
                       String accountNumber, String ibanNumber){
    this.id = id;
    this.currency = currency;
    this.accountNumber = accountNumber;
    this.ibanNumber = ibanNumber;
}

protected SecondClass(Parcel in){
    super(in);
    id = in.readInt();
    currency = in.readString();
    accountNumber = in.readString();
    ibanNumber = in.readString();
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(id);
    dest.writeString(currency);
    dest.writeString(accountNumber);
    dest.writeString(ibanNumber);
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getCurrency() {
    return currency;
}

public String getAccountNumber() {
    return accountNumber;
}

public String getIbanNumber() {
    return ibanNumber;
}
}

I'm passing and getting an ArrayList of both child class' items with intent putParcelableArrayListExtra and getParcelableArrayListExtra methods and get the following error:

Parcel android.os.Parcel@2d0fde33: Unmarshalling unknown type code 3276849 at offset 172

any help would be appreciated 3>


Solution

  • well I'm posting this for those who may run into the same problem as me. the problem was solved after adding the Creator statement to the child classes. for one of the child classes it would be like:

    public static final Creator<FirstClass> CREATOR = new Creator<FirstClass>() {
        @Override
        public FirstClass createFromParcel(Parcel in) {
            return new FirstClass(in);
        }
    
        @Override
        public FirstClass[] newArray(int size) {
            return new FirstClass[size];
        }
    };
    

    hope this helps. 3>