Android共享首选项可防止在存储对象时覆盖

时间:2019-03-20 23:32:55

标签: java android arrays sharedpreferences androidx

我正在使用共享首选项将字符串存储到日历日。我有一个类,它添加一个装饰器并将字符串保存到选定的日期(来自用户输入的字符串),并且工作正常。当我尝试添加新日期时,我的麻烦出现了,共享首选项被覆盖(这是预期的)。

将字符串保存到日历日的方法

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

我想知道的是,是否有一种方法可以使用相同的方法来保存新日期的新数据。当前,如果用户选择另一个日期,则存储在共享首选项中的当前日期及其字符串和相关日期将被新日期数据覆盖。

1 个答案:

答案 0 :(得分:1)

即使使用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);