【问题标题】:boolean java.util.List.add(java.lang.Object)布尔 java.util.List.add(java.lang.Object)
【发布时间】:2019-03-27 00:37:45
【问题描述】:

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

java.lang.NullPointerException:尝试调用接口方法 空对象上的“布尔 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;

    }

【问题讨论】:

  • sharedPref.getString(key, null); 当然你得到了一个 NPE。如果没有指定键的字符串首选项,jsonPreferences 将为空。您需要检查这种情况,如果是,则返回一个空列表。
  • 非常感谢兄弟。浪费了一整天的时间。

标签: android list arraylist sharedpreferences


【解决方案1】:
String jsonPreferences = sharedPref.getString(key, null);

是有问题的行。第二个参数(传递null)是“def”参数,即如果没有存储与指定键匹配的首选项,getString() 返回的参数。

由于可能未设置首选项,jsonPreferences 可能为空(如此处所示)。这意味着

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

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多