4

あるアクティビティから別のアクティビティにデータ オブジェクトを渡す必要がありました。これを行う最善の方法は、Parcelable を使用することです。dataobject には、setter メソッドと getter メソッドを持ついくつかのフィールドがありました。いくつかのフィールドを設定し、オブジェクトを別のアクティビティに渡した後、フィールド値が他のフィールド値に交換されていることがわかりました。パーセルへの書き込みとパーセルからの読み取りのフィールドの順序は同じです。

public void writeToParcel(Parcel out, int flags) {
    out.writeInt(id);
    out.writeString(appNo);
    out.writeString(this.policyNo);
    out.writeInt((int)this.AppRcptDt.getTime());
    out.writeString(this.currentStatus);
    out.writeString(this.productCd);
    out.writeDouble(this.sumAssured);
    out.writeDouble(this.modalPremium);
    out.writeDouble(this.annualPremium);
    out.writeString(this.paymentMode);
    out.writeString(this.branchCd);
    out.writeString(this.branchName);
    out.writeString(this.insuredName);
    out.writeString(this.auraStatus);
    out.writeString(this.ownerName);
    out.writeString(this.agentCd);
    out.writeString(this.billingMode);
}

private ApplicationTrackerDO(Parcel in) {
    id=in.readInt();
    this.appNo = in.readString();
    this.policyNo = in.readString();
    this.AppRcptDt = new Date(in.readLong());
    this.currentStatus = in.readString();
    this.productCd = in.readString();
    this.sumAssured = in.readDouble();
    this.modalPremium = in.readDouble();
    this.annualPremium = in.readDouble();
    this.paymentMode = in.readString();
    this.branchCd = in.readString();
    this.branchName = in.readString();
    this.insuredName = in.readString();
    this.auraStatus = in.readString();
    this.ownerName = in.readString();
    this.agentCd = in.readString();
    this.billingMode = in.readString();
}

フィールド値の違い

4

4 に答える 4

11

順序ではなく、データ型が同じではありません。最初の 4 行から int、string、string、int を書き、次に int、string、string、long を読み取ります。私はこれ以上チェックしませんでした。読み取り操作と書き込み操作の順序とデータ型の両方を一致させる必要があります。

于 2012-04-16T06:21:27.113 に答える
1

あなたはintを書いています

out.writeInt((int)this.AppRcptDt.getTime());

しかし、長文を読む

this.AppRcptDt = new Date(in.readLong());
于 2012-04-16T06:21:50.327 に答える
0

日付オブジェクトにnullを提供する私の解決策

@Override
    public void writeToParcel ( Parcel dest, int flags ) {
        dest.writeInt((birthday != null) ? 1 : 0); // is birthday set?
        dest.writeLong((birthday != null) ? birthday.getTime() : 0);
    }

    public void readFromParcel ( Parcel in ) {
        if(in.readInt() == 1) {
            birthday = new Date(in.readLong());
        } else {
            in.readLong(); // ignore stored value
            birthday = null;
        }
    }
于 2013-06-25T14:02:57.080 に答える