我的应用程序有一个字符串值列表(每个约5-20个字符),我必须持久存储。在我看来,SharedPreferences是最合适的,因为它是一个简短的列表。通常它是空的,或只包含几个值。
我已经看到this question要求基本相同,答案是不合适的,因为StringSet是API级别11,而我的目标是Android 2.1及以上,即API 7。
考虑到通常很小的字符串列表,使用数据库似乎对我来说太过分了。使用文件存储这将是另一种解决方案,但不是那么优雅。我考虑过创建密钥(比如“1”,“2”,“3”等),但这实际上比使用文件更糟糕 - 特别是在回读我的数据时。
无论如何,如果没有其他工作,我将不得不去找文件选项。如果使用SharedLreferences for API lvl 7,我的想法根本不可行,我也很感激听到这一点。
答案 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"
这样的东西(在这种情况下用分号作为分隔符)。但不知道性能问题。