1

わかりました、この厄介な問題はおそらく非常によく知られていますが、それが何と呼ばれているのか、どのように解決するのかわかりません. アプリを開いてメニューに移動し、しばらくしてからアプリを再開すると、すべてのデータが失われます。Android は、OS を可能な限り高速かつ安定に保つために、データをきれいにするのが好きなようです。アプリを再開する前に、内部メモリにデータを保存し、何らかの変数が消去された/nullになったときにデータを取得するために推奨される方法はどれですか? setSharedPreferences を使用して ArrayList をオブジェクトに解析し、オブジェクトを文字列として解析してデータを保存して取得しようとしましたが、オブジェクトを文字列に解析できないという例外が発生します。より良い代替手段が必要です。

どんな助けでも大歓迎です。

編集:

これは、データを取得して保存する方法です。

JSONObject data = (JSONObject) new JSONTokener(result).nextValue();

Helper.RAW_PEOPLE_INFO = data.getJSONArray("people");
Helper.PEOPLE_CONTAINER = new ArrayList<PeopleInfoStorage>();
for( int i = 0; i < Helper.RAW_PEOPLE_INFO.length(); i++ ){
    Helper.PEOPLE_CONTAINER.add( new PeopleInfoStorage(Helper.RAW_PEOPLE_INFO.getJSONObject(i)) );
}

PEOPLE_CONTAINER ArrayList を使用して、後で必要なときに使用します。PEOPLE_CONTAINER ArrayList は、アプリケーションを再開する前におそらく消去されるため、この ArrayList を内部メモリに格納する方法の例を誰かが教えてくれるので、内部メモリからデータを取得して PEOPLE_CONTAINER ArrayList に戻すことができます。またヌルです。

次のようにする必要があります。

@Override
protected void onPause() {  
    if( Helper.PEOPLE_CONTAINER != null ){
        //save the Helper.PEOPLE_CONTAINER ArrayList to the internal memory
    }
    super.onPause();
}

@Override
protected void onResume() {
    if( Helper.PEOPLE_CONTAINER == null ){
        //retrieve the data and store it back to Helper.PEOPLE_CONTAINER ArrayList
    }
    super.onResume();
}
4

2 に答える 2

2

以下は、どの時点でどのストレージ オプションを使用するかについての簡単な説明です。

Shared Preferences : これらは基本的に、アプリケーションの設定やその他の小さなデータを保存するのに適しています。SharedPreferences は、特定のキーの下にデータを保存できるキー/値ストアです。ストアからデータを読み取るには、データのキーを知っている必要があります。そのため、データの読み取りが容易になります。ただし、大規模なデータ セットの場合、データセット内のすべてのキーに対して一意のキーを定義する必要があるため、少し難しくなる可能性があります。例: ユーザー ログイン用のセッション キーを SharedPreferences に格納します。

内部ストレージ: これは、ユーザーがアクセスする必要のないアプリケーション データの保存に適しています。ログまたはアプリケーションが作成/更新/削除するものを保存するのに適している可能性があります。

SQLite : データベースはこの種のデータ用に設計されているため、大量の同じ構造化データを SQLite データベースに格納する必要があります。データはデータベースによって構造化および管理されるため、SQL などのクエリ言語を使用してクエリを実行し、特定の条件に一致するデータのサブセットを取得できます。ここで検索が簡単になります。SQLite は専用データベースほど大きくは拡張できないかもしれませんが、Android アプリなどの小規模なアプリケーションでは非常に迅速で便利です。例: リストビュー アイテムの保存、またはレシピ アプリのレシピの保存。

お役に立てれば!!!

于 2013-01-07T20:15:10.227 に答える
1

アプリケーションでデータを永続化する方法は多数あります。ここでは詳しく説明しませんが、次のリソースを確認してください。

http://developer.android.com/guide/topics/data/data-storage.html

配列リストがある場合は、SQLite の価値があるように思えます。

于 2013-01-07T20:10:16.477 に答える