5

次のクラス フィールドを持つオブジェクトがあります。

int、int、String、MyDatabaseType (カスタム オブジェクト)、List < MyDatabaseDetail > (カスタム オブジェクトの配列リスト)

これをインテント/バンドルに渡すことは可能ですか?

シリアライズ可能とパーセル可能で少し遊んでみましたが、うまくいきませんでした。渡したいメインのオブジェクト タイプだけでなく、すべてのカスタム オブジェクト タイプをパーセル可能にする必要がありますか?

きっともっと良い方法がありますか?

4

2 に答える 2

4

インテントでデータを渡すときは、Parcelable である必要があります。これは、インテントが別のアプリケーション、つまり別の VM に渡される可能性があるためです。オブジェクトがプロセスの境界を越えている可能性があるため、オブジェクトを保存/復元できるメカニズムが必要です。これは、Web サービス呼び出しを介してデータを渡すことに似ています (この場合、オブジェクトは XML や JSON のようなものに「フラット化」されます)。

インテントがアプリケーション内にとどまる場合でも、メモリが不足している場合に発生する可能性があるアプリケーションの強制終了/再起動を Android が選択した場合でも、parcelability によりオブジェクトは存続できます。

パーセル化の代わりにシリアル化を使用できますが、パーセル化の方が効率的です。

于 2013-11-04T05:33:42.300 に答える
0

Parcelableシリアル化できない変数が含まれている場合は、クラスを作成できます。クラス内のすべての変数がプリミティブまたはシリアル化可能である場合、またはそれらをシリアル化できる場合は、それを行うのは簡単です。

このガイドに従うことができます: http://developer.android.com/reference/java/io/Serializable.html

ほとんどの場合、クラスにSerializableインターフェイスを実装させ、クラスに次の行を追加するだけです。

private static final long serialVersionUID = 0L;

(上記のガイドで詳細をお読みください)。

于 2013-11-04T05:33:52.230 に答える