次のような循環アクティビティ ワークフローがあります。
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 がputExtra
2 回書き込まれていることです。ログを入れましたが、確かputExtra
に一度だけ実行されます。しかし、writeToParcel
は 2 回実行されます...理由はわかりません。単純化された例では、これは起こりません。
どんなヒントでも大歓迎です。私は、Parcelable を使用してあらゆる場所でパラメーターを渡すためにすべての作業を行いましたが、それらはたくさんあります。なぜなら、誰もが「代わりに Parcelable を使用することを強くお勧めします」と言うからです。今、私は Parcelable を使用していますが、得られるのは新しい問題の束だけです。