在SharedPreferences中存储列表或集

Wou*_*ter 20 android list sharedpreferences

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

我已经看到这个问题基本相同,答案是不合适的,因为StringSet是API级别11,我的目标是Android 2.1及以上,即API 7.

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

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

Dre*_*ejc 30

我发现从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);
Run Code Online (Sandbox Code Playgroud)

写:

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


kc *_*ili 18

使用这个对象 - > TinyDB - Android-Shared-Preferences-Turbo 非常简单.

TinyDB tinydb = new TinyDB(context);
Run Code Online (Sandbox Code Playgroud)

放在

tinydb.putList("MyUsers", mUsersArray);
Run Code Online (Sandbox Code Playgroud)

要得到

tinydb.getList("MyUsers");
Run Code Online (Sandbox Code Playgroud)


iDr*_*oid 8

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

  • 哈克!必须有更好的方法,对吗?任何人?布勒......布勒?叹了口气,我可能不得不这样做(sooo OLD-school!). (2认同)