2012-04-17 14 views
0

私はAndroidアプリケーション全体でデータオブジェクトを永続化しようとしています。あるアクティビティのオブジェクトにアクセスし、変更し、保存し、新しいアクティビティに移動し、更新された値で同じオブジェクトにアクセスしたいと考えています。Androidアプリを通じてオブジェクトを永続化するには、どのような方法が良いですか?

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

+0

あなたの意図でエキストラとしてオブジェクトを渡していないため、特定の理由がありますか? – Th0rndike

答えて

0
  • あなたはSQLにマッピングオブジェクトのOrmLiteのように、ORMフレームワークを使用することができますが、それはあなたの状況にやり過ぎかもしれません。

  • また、これらの共有オブジェクトParcelableを作成し、インテントを通じてアクティビティ間で渡すこともできます。

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

これは私が検討したいソリューションです。しかし、あなたが何をしていても、この共通のオブジェクトを、カスタムApplicationクラス、静的フィールド、またはSingletonパターンの実装のような何らかの「標準的な」グローバル静的変数に入れないでください。これらはAndroid上の壊れやすい構造体です。

+0

ORMを考慮しました。現在、インテントを介してオブジェクトを渡していますが、サーバーからオブジェクトを取得するために必要なネットワークコールの数を減らすためにキャッシュを実装しようとしています。前にOrmLiteを使ったことがありますか? – Quentamia

+0

HelloWorldレベルの基本的なテスト以外にも、どのように安定しているか良いのかは分かりませんが、有望です。通常、私はSharedPrefsまたは目的に合った解決策を取ります。 –

+0

OrmLiteを選択しました。シンプルな構成を持ち、生のクエリを発行することができます(ローIDを常に持っているわけではないので、必要なものです)。 – Quentamia

0

なぜJSONシリアル化メカニズムを使用しないのですか?あなたは簡単にいくつかの基本的なのfunctionnalitiesでライトウェイトデータベースを構築することができ、あなたのオブジェクトへのスタティックアクセスに伴い

  • loadObjectsFromCache
  • saveObjectsInCache
  • getObjects

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

それはこの1つのと同じです:http://developer.android.com/reference/android/util/JsonReader.html が、あなたのアプリケーションのAPIレベルは、それが基本的なDOMパーサより少ないメモリ使用11

に劣っていても使用することができます。 http://developer.android.com/reference/org/json/JSONObject.htmlを、 同じ速度で。

1

サブクラス化されたアプリケーションに静的フィールドを配置します。マニフェストの内側にも、アプリケーションタグ内に

android:name="MyApp"と入力します。

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

MyApp myApp = (MyApp)getApplicationContext(); 

はこちらを参照してくださいHow to declare global variables in 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(); 
    ... 
    } 
} 
+0

ゾウィー、これは知っておいてよかった! 私はしばらくこのような単純なものを探していました(そして1年以上Androidをプログラミングしました)。それはより複雑なデザインを置き換えることはありませんが、時にはそれがあなたが必要とするものです。私がこのことを以前に見つけたことがない方法を知らないでください。おかげでカイル! –

関連する問題