布尔型java.util.List.add(java.lang.Object)

时间:2018-10-22 21:06:48

标签: android list arraylist sharedpreferences

我正在尝试从“共享首选项”中获取数据,并将该数据插入到“列表”中,但是却出现错误。虽然我已经初始化了列表,但仍然收到此错误

  

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;

    }

1 个答案:

答案 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