Как я могу сохранить в shredpreferences, если arraylist нулевой? - PullRequest
0 голосов
/ 11 марта 2019

Каждый раз, когда мое приложение 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?

1 Ответ

0 голосов
/ 11 марта 2019

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

          if (response.isEmpty()) {

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

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

...