[解決済み】SharedPreferencesにArrayListを保存する。
質問
私は
ArrayList
をカスタムオブジェクトで構成しています。各カスタムオブジェクトには、様々な文字列や数値が含まれています。ユーザーがアクティビティから離れ、後で戻ってくる場合でも、配列が残っている必要がありますが、アプリケーションが完全に終了した後は、配列が利用できる必要はありません。私は、この方法で他の多くのオブジェクトを保存しています。
SharedPreferences
しかし、この方法で配列全体を保存する方法がわかりません。これは可能なのでしょうか?もしかしたら
SharedPreferences
は、この方法ではないのでしょうか?もっと簡単な方法はないのでしょうか?
どのように解決するのですか?
API 11以降では
SharedPreferences Editor
は
Sets
. リストを
HashSet
などに保存しておくとよいでしょう。読み返すときは、それを
ArrayList
必要であればソートすればOKです。
//Retrieve the values
Set<String> set = myScores.getStringSet("key", null);
//Set the values
Set<String> set = new HashSet<String>();
set.addAll(listOfExistingScores);
scoreEditor.putStringSet("key", set);
scoreEditor.commit();
をシリアライズすることもできます。
ArrayList
との間で保存/読み取りを行います。
SharedPreferences
. 以下はその解決策です。
EDITです。
OK、以下は保存するための解決策です。
ArrayList
をシリアル化したオブジェクトとして
SharedPreferences
を作成し、SharedPreferencesから読み込む。
APIはSharedPreferencesとの間で文字列の保存と取得しかサポートしていないため(API 11以降はよりシンプルに)、タスクのリストを持つArrayListオブジェクトを文字列にシリアライズおよびデシリアライズする必要があります。
において
addTask()
TaskManagerApplication クラスのメソッドで、共有環境設定のインスタンスを取得し、シリアル化された ArrayList を、TaskManagerApplication クラスの
putString()
メソッドを使用します。
public void addTask(Task t) {
if (null == currentTasks) {
currentTasks = new ArrayList<task>();
}
currentTasks.add(t);
// save the task list to preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
Editor editor = prefs.edit();
try {
editor.putString(TASKS, ObjectSerializer.serialize(currentTasks));
} catch (IOException e) {
e.printStackTrace();
}
editor.commit();
}
同様に、プリファレンスからタスクのリストを取得するために
onCreate()
メソッドを使用します。
public void onCreate() {
super.onCreate();
if (null == currentTasks) {
currentTasks = new ArrayList<task>();
}
// load tasks from preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
try {
currentTasks = (ArrayList<task>) ObjectSerializer.deserialize(prefs.getString(TASKS, ObjectSerializer.serialize(new ArrayList<task>())));
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
を取得することができます。
ObjectSerializer
クラスは Apache Pig プロジェクトから
オブジェクトシリアライザー.java
関連
-
[解決済み】パッケージ名(Google Analytics)に一致するクライアントが見つからない - 複数のproductFlavorsとbuildTypes
-
[解決済み】インストールエラー。インストールエラー:install_failed_older_sdk
-
[解決済み】ビューのルートとしてNULLを渡さないようにする(膨張したレイアウトのルート要素でレイアウトパラメータを解決する必要がある)。
-
[解決済み】findViewByIDがnullを返す。
-
[解決済み] android.intent.action.MAINの意味は何ですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] ArrayListの初期化を1行で行う。
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] Javaで「ArrayList<String>」を「String[]」に変換する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】react-native: コマンドが見つかりません。
-
[解決済み] カスタムアダプタからnotifyDataSetChangeが機能しない
-
[解決済み】Dalvikとdalvik-cacheとは何ですか?
-
[解決済み】onCreateOptionsMenu(Menu メニュー)とは何ですか?)
-
[解決済み】リストビューにonclicklistenerを追加する(android)
-
[解決済み】getCheckedRadioButtonId()が無駄なintを返す?
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] Android SDK の場所には空白を含めないでください。NDK ツールで問題が発生するためです。
-
[解決済み] APKのインストール中にDELETE_FAILED_INTERNAL_ERRORエラーが発生する。
-
[解決済み] HashSet/HashMapに重複した値を追加すると、前の値に置き換わるか?