логический java.util.List.add (java.lang.Object) - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь получить данные из общих настроек и вставляю эти данные в список, но получаю сообщение об ошибке.Хотя я инициализировал список, но все равно он получает эту ошибку

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);

Вот моя функция getData SharedPrefManager

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 голосов
/ 23 октября 2018
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
...