Установить <String> в android sharedpreferences не сохраняет силу

Я пытаюсь использовать androids sharedpreferences, я зарегистрировал все, и код ниже действительно выполняет набор строк. Проблема в том, что когда я принудительно закрываю приложение и начинаю заново, settings.getStringSet возвращает пустой набор. Нет ошибок в работе.

Я пробовал PreferenceManager.getDefaultSharedPreferences, но это тоже не работает для меня.

Спасибо за ваше время.

public static final String PREFS_NAME = "MyPrefsFile"; private static final String FOLLOWED_ROUTES = "followedRoutes"; 

И позже, когда вызывается сохранение:

 public void onFollowClicked(View view){ SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); Set<String> follows = settings.getStringSet(FOLLOWED_ROUTES, new HashSet<String>()); follows.add(routeId); editor.putStringSet(FOLLOWED_ROUTES, follows); editor.commit(); } 

Solutions Collecting From Web of "Установить <String> в android sharedpreferences не сохраняет силу"

Взгляните сюда .

Также для повторения:

SharedPreferences

SharedPreferences.Editor

РЕДАКТИРОВАТЬ:

На самом деле есть ошибка с этим, см. Здесь . Выдержка оттуда:

Эта проблема все еще присутствует на уровне API-интерфейсов 17.

Это вызвано тем, что метод getStringSet () класса SharedPreferences не возвращает копию объекта Set: он возвращает весь объект, и когда вы добавляете к нему новые элементы, метод commitToMemory класса SharedPrefencesImpl.EditorImpl видит, что Существующее значение равно предыдущему.

Способы решения этой проблемы – сделать копию набора, возвращаемого SharedPreferences.getStringSet, или принудительно записать в память с использованием других предпочтений, которые всегда меняются (например, свойство, которое хранит размер набора каждый раз)

EDIT2:

Здесь может быть решение, посмотрите.

Вы также можете обойти ошибку, упомянутую g00dy следующим образом:

Получите набор из sharedPreferences и сохраните его в переменной.

Затем просто удалите набор в sharedpreferences, прежде чем добавлять его снова при сохранении.

 SharedPreferences.Editor editor= sharedPref.edit(); editor.remove("mSet"); editor.apply(); editor.putStringSet("mSet", mSet); editor.apply(); 

Обязательно используйте apply () или commit () дважды.