在SharedPreferences中存储列表或集

时间:2011-07-06 14:46:15

标签: android list sharedpreferences

我的应用程序有一个字符串值列表(每个约5-20个字符),我必须持久存储。在我看来,SharedPreferences是最合适的,因为它是一个简短的列表。通常它是空的,或只包含几个值。

我已经看到this question要求基本相同,答案是不合适的,因为StringSet是API级别11,而我的目标是Android 2.1及以上,即API 7。

考虑到通常很小的字符串列表,使用数据库似乎对我来说太过分了。使用文件存储这将是另一种解决方案,但不是那么优雅。我考虑过创建密钥(比如“1”,“2”,“3”等),但这实际上比使用文件更糟糕 - 特别是在回读我的数据时。

无论如何,如果没有其他工作,我将不得不去找文件选项。如果使用SharedLreferences for API lvl 7,我的想法根本不可行,我也很感激听到这一点。

3 个答案:

答案 0 :(得分:30)

我发现存储和检索SharedPreferences中的项目列表的最简单的解决方案是简单地将数组序列化/去除JSON中的数据并将其存储到字符串设置中。

Gson非常方便。

READ:

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);

WRITE:

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

答案 1 :(得分:18)

使用此对象 - > TinyDB--Android-Shared-Preferences-Turbo非常简单。

TinyDB tinydb = new TinyDB(context);

tinydb.putList("MyUsers", mUsersArray);

获取

tinydb.getList("MyUsers");

答案 2 :(得分:8)

如果您知道列表条目的顺序和/或无关紧要,您可以将它们全部“粘合”到一个带有您选择的分隔符的String中,然后将其与SharedPreferences一起存储。加载后,您可以根据分隔符将String拆分为条目。像String listEntries = "enty1;entry2;entry3"这样的东西(在这种情况下用分号作为分隔符)。但不知道性能问题。