Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SharedReferences按键返回空值_Android_Sharedpreferences - Fatal编程技术网

Android SharedReferences按键返回空值

Android SharedReferences按键返回空值,android,sharedpreferences,Android,Sharedpreferences,我有使用AlarmManager.setRepeating创建通知的逻辑。。。我成功地创建了一些带有特殊时间的通知来显示它。在这里,我使用storeSelectedDays按某个id保存SharedPreferences值 还有一些BroadcastReceiver,当时间到了,应该显示通知时运行。 在这里,我使用getStoredSelectedDays通过这个id从SharedReferences读取值 公共类SelectedDaysManager{ 私有最终静态字符串首选项\u key=s

我有使用AlarmManager.setRepeating创建通知的逻辑。。。我成功地创建了一些带有特殊时间的通知来显示它。在这里,我使用storeSelectedDays按某个id保存SharedPreferences值

还有一些BroadcastReceiver,当时间到了,应该显示通知时运行。 在这里,我使用getStoredSelectedDays通过这个id从SharedReferences读取值

公共类SelectedDaysManager{ 私有最终静态字符串首选项\u key=sp\u key; 私有最终静态字符串密钥=密钥; 私人最终股份参考;股份参考; 公共选择的DaysManager上下文{ SharedReferences=context.getSharedReferences 首选项\u键,Context.MODE\u私有; } 公共列表getStoredSelectedDayslong id{ 最终列表结果=新的ArrayList; 最终设置=SharedReferences.getStringSetKEY+id, 新哈希集; 对于字符串项:set{ result.addInteger.parseIntitem; } Log.dTIME TIME,String.formatGet selected days:KEY=%s, 天数=%s,键+id,结果; 返回结果; } public void storeSelectedDayslong id,列出selectedDays{ 最终选择集DaysSet=新哈希集; 对于整数天:选择天{ 选择日期set.addString.valueOfday; } 最终SharedReferences.Editor=SharedReferences.edit; editor.putStringSetKEY+id,选择日期设置; editor.commit; Log.dTIME TIME,String.formatSaved selected days:KEY=%s, 天数=%s,键+id,选择的日期设置; } } AlarmReceiver.java

公共类AlarmReceiver扩展了BroadcastReceiver{ @凌驾 接收上下文上下文、意图上的公共无效{ ... 最终列表存储选定日期= App.getInstance.getSelectedDaysManager .getStoredSelectedDaysreminderId; ... } 应用

公共类应用程序扩展应用程序{ 私有静态应用sInstance=新应用; 公共静态BefitApp getInstance{ 回归承诺; } private SelectedDaysManager SelectedDaysManager; @凌驾 创建时的公共无效{ super.onCreate; sInstance=这个; selectedDaysManager=新建selectedDaysManager目标应用程序上下文; ... } public SelectedDaysManager getSelectedDaysManager{ 返回所选的DaysManager; } } 现在,我的问题是:

我保存了两个提醒:

storeSelectedDays1,/some int list/[1,2,3]

storeSelectedDays2,/some int list/[1,2,3]

在SharedReferences中的该文件之后,如下所示:

3. 2. 1. 3. 2. 1. 但是

当广播接收器第一次运行时

getStoredSelectedDays1返回[1,2,3]

当广播接收器第二次运行时

getStoredSelectedDays2返回[]

所以,为什么在第二次运行期间,id==2集是空的。我做错了什么

--编辑--

行为:

我创建了两个提醒:第一个-9:00,第二个-9:10 然后我检查首选项文件。它包含两个键,键1,键2,如上所述。 然后在9:00执行receiver,getStoredSelectedDaysKEY_1返回正确的集合。文件包含相同的数据 在9:10,接收器再次执行一次,但getStoredSelectedDaysKEY_2返回空集。文件仍然包含相同的数据。
OMG.这是不可能的

和..文件是如何处理的?是否有可能因为arraylist为null或空,而调用具有有效id但为null数据的方法来覆盖保存的数据?例如,storeSelectedDays2,null;实际上,文件在整个执行过程中包含相同的数据。请参见--edited--问题的一部分