如何使 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,我会给您一个解决方案
你能做的是:
- 创建名为 current 的首选项以保存字符串的值
- 创建另一个名为 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","")
我正在使用以下代码将 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,我会给您一个解决方案
你能做的是:
- 创建名为 current 的首选项以保存字符串的值
- 创建另一个名为 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","")