我正在使用共享首选项将字符串存储到日历日。我有一个类,它添加一个装饰器并将字符串保存到选定的日期(来自用户输入的字符串),并且它工作正常。当我尝试添加新日期时,我的麻烦出现了,共享首选项被覆盖(这是预期的)。
将字符串保存到日历日的方法
final CalendarDay day1 = date;
final ArrayList<CalendarDay> selectedEventDay = new ArrayList<>();
for (int i = 0; i < 30; i++) {
selectedEventDay.add(day1);
}
String editedText = noteEditText.getText().toString();
CustomEventDay customEventDay = new CustomEventDay(editedText, selectedEventDay);
SharedPreferences.Editor prefsEditor = mPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(customEventDay);
prefsEditor.putString("CustomEventCal", json);
prefsEditor.apply();
我想知道是否有办法使用相同的方法来保存新日期的新数据。目前,如果用户选择另一个日期,存储在共享首选项中的当前日期及其字符串和关联日期将被新的日期数据覆盖。
最佳答案
即使评论中推荐的使用 SQlite 的方式很好,有时您只需要少量数据,然后使用共享首选项会更容易:
因此,如果事件数量仍然很小,您可以开始使用对象数组,然后再次使用 Gson:
Gson gson = new Gson();
List<CustomEventDay> events = // initialized with the content of your shared preferences
events.add(customEventDay);
String json = gson.toJson(events);
关于java - Android 共享首选项防止在存储对象时覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55271648/