5

Gson を使用してパーセル可能なインターフェイスを実装しようとしています。アイデアは、(gson を使用して) json 文字列を作成し、それを区画オブジェクトに書き込むことです。

インターフェイスを実装する正しい方法でしょうか?

私が遭遇した唯一の問題は、オブジェクトを逆シリアル化するときです。実際には、gson を使用してオブジェクトを再作成します。

private MyClass(Parcel in) {
    String json = in.readString();
    Gson gson = new Gson();
    gson.fromJson(json, getClass());
}

問題はfromJson、コンストラクターが作成するオブジェクトであるオブジェクトを関数が返すことです。コードの最後の行は次のようになります。

this=gson.fromJson(json, getClass());

それで、これが を実装する正しい方法である場合、どうすればParcelableこの問題を解決できますか?

4

1 に答える 1

3

Parcelable javadocをもっと注意深く読む必要があります。必要なものがすべて含まれています。

ドキュメントで引用されているように:

インスタンスをパーセルに書き込み、パーセルから復元できるクラスのインターフェース。Parcelable インターフェースを実装するクラスには、Parcelable.Creator インターフェースを実装するオブジェクトである CREATOR という静的フィールドも必要です。

したがって、writeToParcelメソッドを宣言し、Parcel からクラスのインスタンスを生成するクリエーターを使用する必要があります。

プライベート コンストラクターは、オブジェクト自体ではなく、パーセルを指定してオブジェクトのフィールドの値を設定するために使用できる追加のヘルパーです。Java では、thisは正しい値であり、割り当てることはできません。

ところで、パーセライゼーションの目標は、短期間の高速シリアル化プロセスを提供することです。一般に、パーセル化を使用する場合は、高速でコンパクトなデータ形式を使用する必要があります。JSON は選択肢の候補ではありませんが、機能します。

于 2013-11-10T14:14:24.253 に答える