【问题标题】:store arraylist sharedpreferences android存储arraylist sharedpreferences android
【发布时间】:2017-03-19 19:30:39
【问题描述】:

Sharedpreferences 中存储包含太多项目的String 列表是否是个好主意?它会影响应用性能吗?

我这样做是为了存储:

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

【问题讨论】:

  • 唯一的性能损失可能来自editor.commit();。请致电editor.apply()

标签: java android arraylist sharedpreferences


【解决方案1】:

不,在SharedPreference 中存储大量String 喜欢的联系人列表不是一个好主意。

您的应用程序中存储的SharedPreference 的大小没有具体限制,因为它存储在/data/data/[package name]/shared_prefs/[app name].xml 中。由于 SharedPreferences 存储在 XML 文件中,它缺乏 SQLite 的强大事务支持。因此,我建议将此类数据存储在 SQLite 数据库中。

需要记住的另一件事是,我知道的最小大小限制将是您的可用堆空间量,因为 SharedPreferences 会将整个 XML 文件的内容读入内存。

答案大多抄自here

【讨论】:

    【解决方案2】:

    您可以使用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);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-02-22
      • 2015-02-13
      • 2013-09-11
      • 2018-06-13
      • 2016-01-07
      • 2011-09-07
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      相关资源
      最近更新 更多