store arraylist sharedpreferences android

时间:2016-11-06 10:56:30

标签: java android arraylist sharedpreferences

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

2 个答案:

答案 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);
}