Как я могу сохранить в shredpreferences, если arraylist имеет значение null?

Каждый раз, когда мое приложение для Android запускается, я получаю arraylist, MatchingArrayList с моего сервера:

        try {
          JSONArray Object = new JSONArray(MatchingAsString);
          //for every object in the Array
          for (int x = 0; x < Object.length(); x++) {
            final JSONObject obj = Object.getJSONObject(x);
            MatchingArrayList.add(obj.getString("usernameMatch"));
            }

Это выглядит примерно так: [+111, +222]

Затем я сохраняю arraylist в sharedpreferences вот так:

            SharedPreferences sharedPreferencesMAL = PreferenceManager.getDefaultSharedPreferences(getApplication());
            SharedPreferences.Editor editorMAL = sharedPreferencesMAL.edit();
            Gson gsonMAL = new Gson();
            String jsonMAL = gsonMAL.toJson(MatchingArrayList);
            editorMAL.putString("MatchingArrayList", jsonMAL);
            editorMAL.commit();

Таким образом, при следующем использовании приложения, если MatchingArrayList изменится, например, на [+111, +222, +333], оно перезапишет последнее использовавшееся arraylist из [+111, +222].

Это работает хорошо, за исключением случаев, когда MatchingArrayList равно null или пусто. sharedpreferences не обновляется. Я старался:

          if (MatchingArrayList == null) {

            SharedPreferences sharedPreferencesMAL = PreferenceManager.getDefaultSharedPreferences(getApplication());
            SharedPreferences.Editor editorMAL = sharedPreferencesMAL.edit();
            editorMAL.putString("MatchingArrayList", null);
            editorMAL.commit();
          } else {

            //save MatchingArrayList into sharedpreferences so we can use it elsewhere
            SharedPreferences sharedPreferencesMAL = PreferenceManager.getDefaultSharedPreferences(getApplication());
            SharedPreferences.Editor editorMAL = sharedPreferencesMAL.edit();
            Gson gsonMAL = new Gson();
            String jsonMAL = gsonMAL.toJson(MatchingArrayList);
            editorMAL.putString("MatchingArrayList", jsonMAL);
            editorMAL.commit();

          }

  But still the last arraylist is being used. How can I fix this?

Просто проверьте, является ли MatchingArrayList нулевым или нет, прежде чем добавлять в общие настройки. Вы не можете добавить null в общие настройки. Вместо этого добавьте что-нибудь.

twenk11k 10.03.2019 23:43

Я пробую это, как указано в моем вопросе.

CHarris 10.03.2019 23:45

"editorMAL.putString("MatchingArrayList", null);" замените null пустой строкой или чем угодно, чтобы вы знали, что это будет означать null.

twenk11k 10.03.2019 23:50

Я пробовал "editorMAL.putString("MatchingArrayList", "");" но это тоже не сработало. Я также пробовал с if (MatchingArrayList.isEmpty) { и т.д....

CHarris 10.03.2019 23:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо того, чтобы смотреть на свою java arraylist, я проверил свою response на то, что она пуста на стороне php из моего приложения. Так:

          if (response.isEmpty()) {

            SharedPreferences sharedPreferencesMatchingContactsAsArrayList = PreferenceManager.getDefaultSharedPreferences(getApplication());
            SharedPreferences.Editor editorMatchingContactsAsArrayList = sharedPreferencesMatchingContactsAsArrayList.edit();
            editorMatchingContactsAsArrayList.putString("MatchingContactsAsArrayList", "");
            editorMatchingContactsAsArrayList.commit();
          } else {

Это решило мою проблему, обновил файл sharedpreferences.

Другие вопросы по теме