在String
中存储包含太多项目的Sharedpreferences
列表是一个好主意吗?它会影响应用程序的性能吗?
我这样做是为了存储:
public boolean saveArray(List<String> contacts) {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(_context);
SharedPreferences.Editor editor = sp.edit();
editor.putInt("Status_size", contacts.size());
for (int i = 0; i < contacts.size(); i++) {
editor.remove("Status_" + i);
editor.putString("Status_" + i, contacts.get(i));
}
return editor.commit();
}
并阅读:
public void loadArray(Context context) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
_validContactsPhones.clear();
int size = sharedPreferences.getInt("Status_size", 0);
for (int i = 0; i < size; i++) {
_validContactsPhones.add(sharedPreferences.getString("Status_" + i, null));
}
}
答案 0 :(得分:1)
不,在String
中存储大量SharedPreference
类联系人不是一个好主意。
应用程序中存储的SharedPreference
的大小没有特定的限制,因为它存储在/data/data/[package name]/shared_prefs/[app name].xml
中。由于SharedPreferences存储在XML文件中,因此缺少SQLite的强大事务支持。因此,我建议将这种数据存储在SQLite数据库中。
需要记住的另一件事是,我所知道的最小大小限制将是你的可用堆空间量,因为SharedPreferences会将整个XML文件的内容读入内存。
答案主要是从here复制的。
答案 1 :(得分:0)
您可以使用Gson库保存自定义数组列表。
1)首先,您需要创建函数以将数组列表保存到SharedPreferences。
public void saveArray(ArrayList<String> contacts) {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(_context);
SharedPreferences.Editor editor = sp.edit();
Gson gson = new Gson();
String json = gson.toJson(contacts);
editor.putString("Status_List", json);
editor.apply();
}
2)您需要创建函数以从SharedPreferences获取数组列表。
public void loadArray(Context context)
{
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
_validContactsPhones.clear();
Gson gson = new Gson();
String json = prefs.getString("Status_List", "");
Type type = new TypeToken<ArrayList<String>>() {}.getType();
ArrayList<String> temp = gson.fromJson(json, type);
_validContactsPhones.addAll(temp);
}