Android SharedPreferences не сохраняется

Я использовал общие настройки много раз, но по какой-то причине изменения не сохраняются в новом приложении, которое я тестирую. Вот фрагмент важного кода:

SharedPreferences sp = getSharedPreferences(getString(R.string.key_preferences), MODE_PRIVATE);
Set<String> widgets = sp.getStringSet(getString(R.string.key_widgets), (new HashSet<String>()));
widgets.add(name + " " + Integer.toString(appWidgetId) + " " + address);
sp.edit().putStringSet(getString(R.string.key_widgets), widgets).commit();

Я использовал регистрацию, чтобы проверить, добавлен ли виджет в набор, но обновленный набор никогда не сохраняется. Если я изменю последнюю строку на...

sp.edit().putStringSet(getString(R.string.key_widgets), widgets).putString("testkey", "testvalue").commit();

...тогда все отлично сохранится. Что мне не хватает?

*ОБНОВЛЕНИЕ:

Я обнаружил, что это тоже работает:

SharedPreferences sp = getSharedPreferences(getString(R.string.key_preferences), MODE_PRIVATE);
Set<String> widgets = sp.getStringSet(getString(R.string.key_widgets), (new HashSet<String>()));
Set<String> newWidgets = new HashSet<String>();
for (String widget : widgets) newWidgets.add(widget);
newWidgets.add(name + " " + Integer.toString(appWidgetId) + " " + address);
sp.edit().putStringSet(getString(R.string.key_widgets), newWidgets).commit();

Возможно, я что-то пропустил в документации о необходимости создания нового объекта для редактора, чтобы сохранить префы.

*ОБНОВЛЕНИЕ 2:

Не имеет значения, создаю ли я объект редактора:

SharePreferences.Editor spe = sp.edit();
spe.putStringSet(getString(R.string.key_widgets), widgets)
spe.commit();
11
задан Cœur 15 July 2017 в 19:31
поделиться