我正在尝试从“共享首选项”中获取数据,并将该数据插入到“列表”中,但是却出现错误。虽然我已经初始化了列表,但仍然收到此错误
java.lang.NullPointerException:尝试调用接口方法 空对象上的'boolean java.util.List.add(java.lang.Object)' 参考
Information info = new Information(name, mobile, email, zone, type);
List<Information> listItems = new ArrayList<>();
SharedPrefManager sharedPrefManager = new SharedPrefManager(getActivity());
listItems = sharedPrefManager.getDataFromSharedPreferences("info");
listItems.add(info);
sharedPrefManager.setDataToSharedPreferences("info", listItems);
这是我的SharedPrefManager getData函数
public List<Information> getDataFromSharedPreferences(String key) {
Gson gson = new Gson();
SharedPreferences sharedPref = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
String jsonPreferences = sharedPref.getString(key, null);
Type type = new TypeToken<List<Information>>() {
}.getType();
List<Information> contactList = gson.fromJson(jsonPreferences, type);
return contactList;
}
答案 0 :(得分:1)
String jsonPreferences = sharedPref.getString(key, null);
是有问题的线。第二个参数(您要传递null
的地方)是“ def”参数,即getString()
返回的内容,如果没有存储与指定键匹配的首选项。
由于可能未设置首选项,因此jsonPreferences
可能为null(此处就是这种情况)。这意味着
List<Information> contactList = gson.fromJson(jsonPreferences, type);
将失败,因为您不能从空引用创建任何对象; Gson试图解析一个空字符串。
您应在jsonPreferences
作业下方添加一个空检查:
String jsonPreferences = sharedPref.getString(key, null);
if (jsonPreferences == null || jsonPreferences.isEmpty()) return new ArrayList<Information>(); //return an empty list if there's no data; also checking for an empty String