In einem Android-Projekt habe ich eine Klasse mit diesen Feldern:Parcel Objekt mit Aufzählungen in Android
public class TransactionHistoryDetail1 implements Parcelable, DatabaseEnabled{
private long id;
private static final String TABLE_NAME = "TransactionHistoryDetail";
private static final String EMPTY_STRING = "";
@XmlElement(name = "TxUd", required = true)
private String TxUd;
@XmlElement(name = "TxLclDtTm", required = true)
private Date TxLclDtTm;
@XmlElement(name = "CcyCd")
private CurrencyCode CcyCd;
@XmlElement(name = "Amt")
private BigDecimal Amt;
@XmlElement(name = "PmttpCd", required = true)
private PaymentTypeCode PmttpCd;
@XmlElement(name = "OprtnCd", required = true)
private OperationCode OprtnCd;
@XmlElement(name = "AppLabltpCd", required = true)
private AppLabelTypeCode AppLabltpCd;
@XmlElement(name = "PdSrl")
private String PdSrl;
@XmlElement(name = "PdBrndDsc")
private String PdBrndDsc;
@XmlElement(name = "UsrEml")
private String UsrEml;
@XmlElement(name = "CstmrAdr")
private String CstmrAdr;
@XmlElement(name = "TxDtlDsc")
private String TxDtlDsc;
@XmlElement(name = "TxRltdInd")
private boolean TxRltdInd;
@XmlElement(name = "TxSttsCd", required = true)
private TransactionStatusCode TxSttsCd;
@XmlElement(name = "UpdtDt", required = true)
private Date UpdtDt;
...
}
Im Versuch, Objekte dieser Klasse als Parcelables zu schreiben und zu lesen, aber im nicht sicher, wie das Schreiben und Lesen enums.
Meine writeToParcel Methode sieht wie folgt aus:
@Override
public void writeToParcel(Parcel dest, int flags) {
SimpleDateFormat sdf = new SimpleDateFormat(JsonBuilder.DateFormat);
dest.writeLong(id);
dest.writeDouble(Amt.doubleValue());
dest.writeString(PdSrl);
dest.writeString(PdBrndDsc);
dest.writeString(TxUd);
dest.writeString(PdSrl);
dest.writeString(UsrEml);
dest.writeString(CstmrAdr);
dest.writeString(TxDtlDsc);
dest.writeString((CcyCd == null) ? "" : CcyCd.name());
dest.writeString((PmttpCd == null) ? "" : PmttpCd.name());
dest.writeString((OprtnCd == null) ? "" : OprtnCd.name());
dest.writeString((AppLabltpCd == null) ? "" : AppLabltpCd.name());
dest.writeString(sdf.format(TxLclDtTm));
dest.writeString(sdf.format(UpdtDt));
dest.writeByte((byte) (TxRltdInd ? 1 : 0));
}
und mein Constructor mit Parcel sieht wie folgt aus
privaten TransactionHistoryDetail1 (Parcel in) {
SimpleDateFormat sdf = new SimpleDateFormat(JsonBuilder.DateFormat);
try {
TxLclDtTm = sdf.parse(in.readString());
UpdtDt = sdf.parse(in.readString());
} catch (ParseException e) {
e.printStackTrace();
}
id = in.readLong();
TxUd = in.readString();
PdSrl = in.readString();
PdBrndDsc = in.readString();
UsrEml = in.readString();
CstmrAdr = in.readString();
TxDtlDsc = in.readString();
TxRltdInd = in.readByte() != 0;
Amt = new BigDecimal(in.readDouble());
CcyCd = CurrencyCode.valueOf(in.readString());
PmttpCd = PaymentTypeCode.valueOf(in.readString());
OprtnCd = OperationCode.valueOf(in.readString());
AppLabltpCd = AppLabelTypeCode.valueOf(in.readString());
TxSttsCd = TransactionStatusCode.fromValue(in.readString());
}
Die writeToParcel i belive seine Arbeits naja, aber der Konstruktor stürzt bei der "CcyCd" Zeile ab.
Meine Currency Klasse ist eine Enum, (so PaymentTypeCode, OperationCode und AppLabelTypeCode), die wie folgt aussieht: mit Aufzählungen in Parcelables
@XmlType(name = "CurrencyCode")
@XmlEnum
public enum CurrencyCode {
EUR;
public String value() {
return name();
}
public static CurrencyCode fromValue(String v) {
return valueOf(v);
}
}
Gibt es eine andere Art und Weise umgehen?
Die Ausnahme i bekommen, ist dies:
java.lang.RuntimeException: Kann Aktivität ComponentInfo {package/package.activities.ChildActivity} starten: java.lang.IllegalArgumentException: Nein Enum Konstante package.data .apiClasses.CurrencyCode. EUR CASH CLS APP 2017-04-10T09: 07: 52.525Z 2017-04-10T09 : 07: 52.528Z CHILD_12345 ?
Was ist tmpMState? – Ric
Ich rate seinen tmpCurrencyCode. Ich bekomme einige seltsame Werte im tmpCurrencyCode nach in.readInt() bereits 0, 101, 24 und so weiter. Danach bekomme ich eine Exception in der folgenden Zeile. Kann die Aktivität nicht starten ComponentInfo {package/package.activities.ChildActivity}: java.lang.ArrayIndexOutOfBoundsException: length = 1; index = 24 – Ric
Befolgen Sie die Reihenfolge beim Lesen und Schreiben Paket? Sie sollten aus dem Paket genau in der Reihenfolge lesen, die Sie ihm geschrieben haben, aber in Ihrem Code tun Sie es nicht in Reihenfolge. –