web-dev-qa-db-ja.com

リストまたはセットをSharedPreferencesに保存する

私のアプリには文字列値のリストがあり(それぞれ約5〜20文字)、永続的に保存する必要があります。 SharedPreferencesは短いリストなので、私には最も適切なようです。通常は空であるか、いくつかの値が含まれています。

私はすでに見ました この質問 これは基本的に同じ質問ですが、StringSetはAPIレベル11であり、私はAndroid 2.1以上をターゲットにしているため、答えは不適切です、これはAPI7です。

通常は文字列のリストが少ないことを考えると、データベースを使用することは私には完全にやり過ぎのように思えます。これを保存するためにファイルを使用することは別の解決策ですが、それほどエレガントではありません。キー(「1」、「2」、「3」など)を作成することを検討しましたが、実際にはファイルを使用するよりも悪いです-特にデータの読み取りに関しては。

とにかく、他に何も機能しない場合は、ファイルオプションを選択する必要があります。 SharedPreferences for APIレベル7を使用して私のアイデアが単に実用的でない場合は、それも聞いていただければ幸いです。

20
Wouter

SharedPreferencesからアイテムのリストを保存および取得する最も簡単な解決策は、配列をJSONにシリアル化/脱セリラ化して文字列設定に保存することです。

Gsonはそれを行うのに本当に便利です。

読んだ:

SharedPreferences prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE);
String value = prefs.getString("list", null);

GsonBuilder gsonb = new GsonBuilder();
Gson gson = gsonb.create();
MyObject[] list = gson.fromJson(value, MyObject[].class);

書く:

String value = gson.toJson(list);
SharedPreferences prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE);
Editor e = prefs.edit();
e.putString("list", value);
e.commit();
30
Drejc

このオブジェクトの使用-> TinyDB--Android-Shared-Preferences-Turbo 非常に簡単です。

TinyDB tinydb = new TinyDB(context);

置く

tinydb.putList("MyUsers", mUsersArray);

取得するため

tinydb.getList("MyUsers");
18
kc ochibili

リストエントリの順序がわかっている場合や、問題がない場合は、選択したセパレータを使用してすべてを1つの文字列に「接着」し、SharedPreferencesで保存できます。それをロードバックした後、文字列をセパレータに基づいてエントリに分割します。何かのようなもの String listEntries = "enty1;entry2;entry3"(この場合は区切り文字としてのセミコロン)。しかし、パフォーマンスの問題についてはわかりません。

8
iDroid