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

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

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

最佳答案

即使评论中推荐的使用 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/

相关文章:

Java对象移动

java - 如何使用 Stetho 和 okhttp3 进行网络检查?

服务问题中的 Android 线程

java - 存储未定义数量的整数

c - 矩阵乘法 C

c# - 使用 java 未达到预期结果,但使用 c# 可以达到预期结果

java - android中按钮的随机文本

android - 如何为 ionic 创建 cordova 插件

arrays - 为什么 Hash#merge 使用 splat 运算符返回哈希数组数组而不是哈希数组?

java - 删除 LineNumberTable 并过滤 LocalVariableTable?