如何使 SharedPreferences 更新数据而不是覆盖数据并丢失部分数据?

How can I make SharedPreferences to update the data instead of overwriting the data and losing part of it?

我正在使用以下代码将 ArrayList<String> 保存到 SharedPreferences 中:

StringBuilder stringBuilder = new StringBuilder();

    for(String str: semesterArray) {
        stringBuilder.append(str);
        stringBuilder.append(",");
    }

    SharedPreferences sharedPreferences = getSharedPreferences("PREFERENCES", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString("semesterArray", stringBuilder.toString());
    editor.apply();

这在一定程度上完成了工作,因为它按预期保存了 ArrayList<String>,并且当应用程序重新启动时,添加的 Semesters 仍存储在 ArrayList<String> 中正如我希望的那样。但是如果我在重新启动应用程序后添加更多 Semesters,保存的 Semesters 将被覆盖并且我会丢失之前保存的 Semesters。有没有办法更新 SharedPreferences 而不是覆盖?如果不是,我应该朝什么方向移动来存储这些Semesters?感谢您的帮助!

正如我在评论中提到的那样,使用 sharedPrefences 更新或插入新值并不是一个好的做法,但如果您想使用 sharedPrefences,我会给您一个解决方案

你能做的是:

  1. 创建名为 current 的首选项以保存字符串的值
  2. 创建另一个名为 new 的首选项,以在之后保存新数据 检查它是否不等于当前值。

您将以类似以下代码的方式结束:

 sharedPreferences = getSharedPreferences("shared",MODE_PRIVATE);
        editor = sharedPreferences.edit();
        String text = "first text";
        editor.putString("current",text);
        if (!sharedPreferences.getString("current","").equals(sharedPreferences.getString("new","")))
        {
            editor.putString("new",sharedPreferences.getString("current","") + text );
            editor.commit();

        }
        editor.commit();

Result after first save : sharedPreferences.getString("current","") will return "some text" and sharedPreferences.getString("new","") will return ""

Result after changing "first Text" to " new text" : sharedPreferences.getString("current","") will return "new text" and sharedPreferences.getString("new","") will return "first text new text"

如何使用它:

  if sharedPreferences.getString("new","") equals ""
your data is not updated  use sharedPreferences.getString("current","")  
else  your data is updated so use sharedPreferences.getString("new","")