4

次のような循環アクティビティ ワークフローがあります。

A -> B -> C -> A -> B -> C -> A -> B -> C...

Activit B から C に Parcelable を渡しています。初めて機能します。二度目は私に与える

パーセル android.os.Parcel@405156d0: オフセット 1108 で不明な型コード 7471204 をアンマーシャリングしています

オブジェクトを読み取る行。

オブジェクトは変更されませんでした。まったく同じかどうかはわかりませんが、少なくとも内容はまったく同じです。1回目はうまくいき、2回目はうまくいかないのはなぜですか?

時にはそれは初めて起こることもあります。

書き込み/読み取り (1 つの整数フィールドのみでテスト) ですべてを削除しようとしましたが、それでも同じ結果が得られます。

エラーが発生した場合、オブジェクトはまったく読み取られず、次の行getParcelable()は実行されますが、実行されることはなくcreateFromParcel、さらにコンストラクターも実行されません。エラーが発生するだけで、何もしません。したがって、フィールドの分割に関するエラーではありません。

私はまったく無知です...

非常に小さなテスト環境で再現してみました.2つのアクティビティと非常に小さなオブジェクトがあり、パーセルブルを何度でも渡すことができ、正しいです。

ここにコード全体を投稿することはできません。

どのようなことがこのエラーを引き起こしているのか知りたいだけです。とコンストラクターは正しいです。writeToParcelデータは同じ順序で書き込まれ、読み取られます。正しいタイプです。CREATOR 変数も正しいです。すべてを 100 回チェックしました。そして、言ったように、それは何度も機能します。オブジェクト内のデータがまったく同じである場合があります (チェックされ、すべてのフィールドに同じ値が含まれています)。最初は機能し、2 回目はこの「不明な型のアンマーシャリング」が表示されます。

非常に興味深く、関連している可能性があるもう 1 つのことは、私も理解できませんが、1 回しか実行していませんが、parcelable がputExtra2 回書き込まれていることです。ログを入れましたが、確かputExtraに一度だけ実行されます。しかし、writeToParcelは 2 回実行されます...理由はわかりません。単純化された例では、これは起こりません。

どんなヒントでも大歓迎です。私は、Parcelable を使用してあらゆる場所でパラメーターを渡すためにすべての作業を行いましたが、それらはたくさんあります。なぜなら、誰もが「代わりに Parcelable を使用することを強くお勧めします」と言うからです。今、私は Parcelable を使用していますが、得られるのは新しい問題の束だけです。

4

1 に答える 1

0

Parcelable クラスを使用しているときにこのエラーが発生しました。このクラスに変数を追加しました。この変数をメソッド「writeToParcel」と Parcel オブジェクトのコンストラクターに追加するのを忘れていました。

この変数を以下のメソッドに追加することで解決しました。

@Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(id);
        dest.writeString(name);

}

public ItemDetails(Parcel source) {
        id = source.readString();
        name = source.readString();
}
于 2014-10-12T20:15:01.937 に答える