我有几个对象,这些对象是从json文件导入的,并显示在列表中。当应用打开时,它将获取json数据,并为每个数据创建一个唯一的对象。我只显示列表中的几个变量。
每个项目都有一个唯一的数字ID。我想用作Shared-Preferences键来为其保存布尔值。
如果为true,则将选中列表中的复选框;如果为false,则将不选中该复选框。
if (!icsp.getBoolean(UniqueID,false)) {
icsp.edit().putBoolean(UniqueID, false).apply();
myItem.setSelected(false);
} else {
myItem.setSelected(true);
icsp.edit().putBoolean(UniqueID, true).apply();
}
此代码处于mainactivity中,并在“ for”循环中为每个对象运行。我的问题是,每当我要编辑或访问此代码或我尝试过的任何其他代码中的sharedpreference时,都会出现此错误:
java.lang.RuntimeException: Unable to start activity ComponentInfo{yasanx.owitemtracker/yasanx.owitemtracker.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.content.SharedPreferences.getBoolean(java.lang.String, boolean)' on a null object reference
我已经进行了很多搜索,但找不到关于为什么发生这种情况的任何答案。
编辑:我见过一些人说我必须使用“ if”检查是否为空,并避免这种情况,但是在此基于数据的项目中,我不应该在以下任何空值 ALSO :>
“!icsp.getBoolean(UniqueID,false)”
有一个“默认值”,所以如果它为null,它将使用false代替,对吧? .am我缺少什么吗?