0

Android アプリ全体でデータ オブジェクトを永続化しようとしています。1 つのアクティビティでオブジェクトにアクセスし、それを変更して保存し、新しいアクティビティに移動して、更新された値で同じオブジェクトにアクセスできるようにしたいと考えています。

私が本質的に話しているのはキャッシュですが、私のデータ オブジェクトは複雑です。たとえば、ObjectA には ObjectC を含む ObjectB が含まれます。Sqlで複雑なオブジェクトを永続化するための優れた方法、ツール、またはフレームワークを知っている人はいますか?

4

3 に答える 3

1

サブクラス化されたアプリケーションに静的フィールドを配置します。マニフェストの中に、次のように入力します。

android:name="MyApp"アプリケーションタグ内。

また、他のファイルからアクセスするには、次を使用します。

MyApp myApp = (MyApp)getApplicationContext();

Androidでグローバル変数を宣言する方法はこちらをご覧ください。:

class MyApp extends Application {

  private String myState;

  public String getState(){
    return myState;
  }
  public void setState(String s){
    myState = s;
  }
}

class Blah extends Activity {

  @Override
  public void onCreate(Bundle b){
    ...
    MyApp appState = ((MyApp)getApplicationContext());
    String state = appState.getState();
    ...
  }
}
于 2012-04-17T15:58:42.197 に答える
0
  • OrmLiteのようなORMフレームワークを使用して、オブジェクトをSQLにマッピングすることもできますが、状況によってはやり過ぎかもしれません。

  • これらの共有オブジェクトをパーセル可能にして、インテントを介してアクティビティ間で渡すこともできます。

  • これらのオブジェクトをSharedPreferencesに保存して、各アクティビティが必要に応じていつでもそれらにアクセスできるようにすることもできます。また、オブジェクトはこの方法で永続化されます。ただし、これはより多くのIOアクセスを意味する可能性があるため、それも考慮に入れてください。たとえば、Gsonを使用して、このためにオブジェクトをより簡単にシリアル化できます。

これらは私が検討する解決策です。ただし、カスタムApplicationクラス、静的フィールド、またはシングルトンパターンの実装を使用するなど、この共通オブジェクトをある種の「標準」グローバル静的変数に入れないでください。これらはAndroidでは非常に壊れやすい構造です。

于 2012-04-17T15:43:43.350 に答える
0

JSONシリアライゼーションメカニズムを使用しないのはなぜですか?

オブジェクトへの静的アクセスに関連して、いくつかの基本的な機能を備えた軽量データベースを簡単に構築できます。

  • loadObjectsFromCache
  • saveObjectsInCache
  • getObjects

オブジェクトを別のファイルに保存し、次のようなストリーミング json パーサーを使用することもできます: http://code.google.com/p/google-gson/

これはhttp://developer.android.com/reference/android/util/JsonReader.htmlと同じです が、アプリケーションの API レベルが 11 より劣っていても使用できます。

基本的な DOM パーサー ( http://developer.android.com/reference/org/json/JSONObject.html )よりも少ないメモリを使用します が、速度は同じです。

于 2012-04-17T15:39:36.020 に答える