0

大規模な XML を解析し、アプリケーション全体でシリアル化されたデータにアクセスできるようにするアプリを設計しています。データを保存し、各コンポーネント (すべてではありません) がデータにアクセスできるようにするデータ オブジェクトを用意するつもりです。

このデータを非永続的なものにして、アプリケーションが XML を解析し、データをメモリに保持するようにしたいと考えています。このデータは大きくなります (XML ファイルは 2 MB を超えます)。また、ユーザーが別のアプリに切り替えたときにデータがそこにあることを望みます。

次のような可能な解決策を調べました。

  • 静的オブジェクト
  • シングルトン
  • アプリケーションの拡張
  • サービスの利用
  • SQLite データベースの使用 (これはやりたくありません)

シングルトンとアプリケーションの拡張などの果てしない議論には入りたくありませんが、単体テストも行いたいと思っており、シングルトンと静的オブジェクトはテストが難しいと聞いています。

誰でもこれに光を当てることができますか?それを行う最もエレガントな方法は何ですか?

編集:データを永続化する必要がありますか? 永続化するということは、理論的には、XML の 1 つの解析があり、それをシリアル化し、データをデータベースに格納し、オブジェクトを使用してコンポーネントからそのデータにアクセスできることを意味します。それはどのように聞こえますか?

編集 2: アプリケーション全体でデータにアクセスできるようにする方法は、データを格納する SQLite データベースを使用することだと思います。

XML ファイルを使用して、データを解析し、作成した SQLiteOpenHelper のサブクラスを使用して、最初の起動時にデータベースに配置します。データが必要な場合は、読み取りアクセスを使用してサブクラスを使用してデータベースにクエリを実行します。各コンポーネント (Activity/Service/etc.) には SQLiteOpenHelper の独自のインスタンスがあり、データベースにクエリを実行してデータにアクセスできます。これはどのように聞こえますか?

4

3 に答える 3

0

あなたのすべての懸念を考慮して、あなたが望むものを達成するためにShared Preferencesを使用します。私のアプリのコード例は次のとおりです。

簡単にするために変更:

private static final String PREF_NAME = "MyPrefs"; //Any value would do
private static final String PREFS_LOGIN_USER= "user"; //Any value would do
private static final String PREFS_LOGIN_PASSWORD= "password"; //Any value would do

public void onCreate(Bundle bundle){
    super.onCreate(savedInstanceState);
    ....

    //Create a preference file
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);

    //Put values
    SharedPreferences.Editor editor = settings.edit();
    editor.putString(PREFS_LOGIN_USER, "admin");
    editor.putString(PREFS_LOGIN_PASSWORD, "P@$$w0rd");
    editor.commit();

    //Get values
    String userName = settings.getString(PREFS_LOGIN_USER, null);
    String password = settings.getString(PREFS_LOGIN_PASSWORD, null);
}

これらの値は、アプリを閉じても保持されます。

ちなみに、editor.remove(PREFS_LOGIN_USER)値を削除したい場合にも使用できます。editor.commit();変更を永続化するためにも呼び出します。

于 2012-08-13T09:08:30.683 に答える
0

アプリケーション全体でデータにアクセスできるようにする方法は、データを格納する SQLite データベースを使用することだと思います。

XML ファイルを使用して、データを解析し、作成した SQLiteOpenHelper のサブクラスを使用して、最初の起動時にデータベースに配置します。データが必要な場合は、読み取りアクセスを使用してサブクラスを使用してデータベースにクエリを実行します。各コンポーネント (Activity/Service/etc.) には、データベースにクエリを実行するための SQLiteOpenHelper の独自のインスタンスがあります。

于 2012-08-14T11:11:12.073 に答える