可分解扩展的问题:获取解组未知类型代码异常

时间:2018-06-17 12:52:38

标签: android-studio android-intent arraylist parcelable

总而言之,我有一个settlementItemeBase课程作为我的父亲和两个孩子。我想让父类成为parcelable,所以当扩展发生时,我的两个子类也是parcelable。我不知道我在做什么是对还是错。我搜索了一下,但没有任何帮助我。 这是我的课程:

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) {
}
}

第一个孩子班:

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;
}
}

第二个孩子班:

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;
}
}

我正在传递并使用intent putParcelableArrayListExtragetParcelableArrayListExtra方法获取两个子类项的ArrayList,并收到以下错误:

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

任何帮助将不胜感激3&gt;

1 个答案:

答案 0 :(得分:0)

我正在为可能遇到与我相同问题的人发布此信息。 将Creator语句添加到子类后,问题得以解决。 对于其中一个子类,它将是:

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];
    }
};
希望这会有所帮助。 3 GT;