Я использовал общие настройки много раз, но по какой-то причине изменения не сохраняются в новом приложении, которое я тестирую. Вот фрагмент важного кода:
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();