2017-03-28 10 views
1

現在、アンドロイドアプリでオブジェクト状態を維持する際に問題が発生しています。
私はある種のマルチレベルマスターディテールフローを持っています。
たとえば、私はClientのリストを持っています。各Clientは複数のOrderを持ち、各Orderは複数のArticleを持っています。 - あなたは私がBundleClientを書き、DetailActivityを開くMasterActivityClientをクリックすると
:今、私は次のようでしたまで

- DetailActivityではBundleからClientを読んで表示しています。アクティビティを変更するときにオブジェクトを保持する

これは多かれ少なかれ細かく機能しましたが、オブジェクトが大きすぎてシリアライズできない場合があります(たとえば、Orderが多いClient)。

したがって、私はClientのIDのみをシリアル化し、DetailActivityのデータベースからロードしたかったのです。通常この方法はうまくいきますが、うまくいかない状況が1つあります。

Articleは、OrderMaster)を保存したときにのみ保存されます。したがって、Orderに新しいArticleを作成し、Orderを保存しないと、Articleも保存されません。
つまり、私は常にDetailActivityの中のデータベースからリロードして、完全なオブジェクトを持つ必要があることを意味します。ただし、それを維持すると、Bundleを使用すると制限(500kB to 1MB)を超える可能性があります。

私の質問は、このようなデータを永続化させる方法は何ですか?

答えて

2

より良い方法は、アクティビティ間で転送するデータを指す独自のシングルトンクラスを作成することです。

Article articleToPassを持つDataManagerシングルトンアクティビティをお勧めします。 セッターにarticleToPassを設定して、あなたが望むものを指し示すようにします。 とgetterまたはreaderは、記事を取得して読み込み、articleToPassを無効にします。

このDataManagerシングルトン(このDataManagerシングルトンは、拡張アプリケーションクラスまたはMainActivityのいずれかで初期化できます)を使用してアプリケーションデータを管理します。

アプリが破壊され、バックロードされたときに包みなさいあなたがオブジェクトを永続化する必要があります。

  1. (私は何の理由はなぜあなたは必要のないデータを保存していない参照のあなたが必要なすべてのデータが含まれているDBのエントリオブジェクトの記事からの作成ここで)
  2. すべてのデータをダンプ(共有設定、キーと値を使用)
  3. 詳細画面に入るときに、必要なすべてのデータをIDなどで要求するクエリを作成する必要があります。
  4. 必要なすべてのオブジェクトをJSON(単純にGSONを使用)に変換し、JSONをファイルにダンプし、必要に応じて読み込みます。

私は上記の解像度が十分にあると思います:)私はこのソリューションの

+0

あなたのソリューションに感謝しますが、私はそれが同じ問題を@ alexanderkulyakhtinのソリューションを持っていると思います。アプリが破壊されたら、私はすべてのデータを失うでしょうか? – Springrbua

+0

私の回答を – Mercury

+0

更新していただき、ありがとうございます。私は解決策について考えて、その解決策を実装しようとします。ありがとう – Springrbua

1

MyAppクラスをApplicationからサブクラス化し、マニフェストで指定することができます。このクラスはシングルトンで、アンドロイドアプリケーションがこのように実行されているときは常に利用可能です(MyApp)getApplication()

したがって、このクラスのフィールドでは、アクティビティ間で保持する必要がある一時的なデータを保持することができます。

OSはいつでもアプリケーションを終了できるので、このフィールドがnullではないかどうかをチェックする必要があります。この場合、データをリロードする必要があります。 SharedPreferencesのどこかにリロードするデータのインデックスを保持することができます。

+0

感謝を助け願っています。ユーザーがアプリケーションを切り替えるとAndroidが自分のアプリを破壊すると決めたら、すべてのデータが正しく失われますか?その場合、どのようにデータを保持しますか? – Springrbua

+0

Androidはいつでもアプリケーションを終了できるので、SQL DbまたはSharedPreferencesのいずれかでデータを保持する必要があります。このソリューションでは、大量のデータをバンドルに入れないようにすることができます。これは、ほとんどの場合、アプリケーションを介してそれらのデータを参照することになります。あなたのプログラムが死んでしまった場合は、SharedPreferencesの別の場所にある別のIDを使って最新のデータを復元します。例えば、 –

+0

あなたの素早い返信をありがとう。 – Springrbua

関連する問題