可打包扩展的问题:获取解组未知类型代码异常
issues with parcelable extension: getting unmarshalling unknown type code exception
长话短说,我有一个 settlementItemeBase
class 作为我的父亲和两个 child 人。我想让父亲 class parcelable
发生扩展,我的两个 child class 也是 parcelable
。我不完全知道我在做什么是对还是错。我搜索了一下,但没有任何帮助。
这是我的 classes:
结算项目基础:
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) {
}
}
第一childclass:
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;
}
}
秒childclass:
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;
}
}
我正在通过 child class' 意图 putParcelableArrayListExtra
和 getParcelableArrayListExtra
方法传递并获取两个项目的 ArrayList,并收到以下错误:
Parcel android.os.Parcel@2d0fde33: Unmarshalling unknown type code 3276849 at offset 172
任何帮助将不胜感激 3>
好吧,我将这篇文章发布给可能 运行 遇到与我相同问题的人。
在 child 类 中添加 Creator
语句后问题得到解决。
对于 child 类 之一,它就像:
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>
长话短说,我有一个 settlementItemeBase
class 作为我的父亲和两个 child 人。我想让父亲 class parcelable
发生扩展,我的两个 child class 也是 parcelable
。我不完全知道我在做什么是对还是错。我搜索了一下,但没有任何帮助。
这是我的 classes:
结算项目基础:
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) {
}
}
第一childclass:
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;
}
}
秒childclass:
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;
}
}
我正在通过 child class' 意图 putParcelableArrayListExtra
和 getParcelableArrayListExtra
方法传递并获取两个项目的 ArrayList,并收到以下错误:
Parcel android.os.Parcel@2d0fde33: Unmarshalling unknown type code 3276849 at offset 172
任何帮助将不胜感激 3>
好吧,我将这篇文章发布给可能 运行 遇到与我相同问题的人。
在 child 类 中添加 Creator
语句后问题得到解决。
对于 child 类 之一,它就像:
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>