Каждый раз, когда мое приложение для 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?
Я пробую это, как указано в моем вопросе.
"editorMAL.putString("MatchingArrayList", null);" замените null пустой строкой или чем угодно, чтобы вы знали, что это будет означать null.
Я пробовал "editorMAL.putString("MatchingArrayList", "");" но это тоже не сработало. Я также пробовал с if (MatchingArrayList.isEmpty) { и т.д....




Вместо того, чтобы смотреть на свою java arraylist, я проверил свою response на то, что она пуста на стороне php из моего приложения. Так:
if (response.isEmpty()) {
SharedPreferences sharedPreferencesMatchingContactsAsArrayList = PreferenceManager.getDefaultSharedPreferences(getApplication());
SharedPreferences.Editor editorMatchingContactsAsArrayList = sharedPreferencesMatchingContactsAsArrayList.edit();
editorMatchingContactsAsArrayList.putString("MatchingContactsAsArrayList", "");
editorMatchingContactsAsArrayList.commit();
} else {
Это решило мою проблему, обновил файл sharedpreferences.
Просто проверьте, является ли MatchingArrayList нулевым или нет, прежде чем добавлять в общие настройки. Вы не можете добавить null в общие настройки. Вместо этого добавьте что-нибудь.