Общие настройки Android не сохраняются
Я создал Android-обои для Android, и я пытаюсь разрешить пользователю выбирать изображение со своего телефона и применять его как фоновое изображение, но когда я запускаю действие, которое начинается с намерения выбирать изображения, общие предпочтения, похоже, не сохраняются должным образом.
Ниже мой метод onCreate активности, который я запускаю, когда пользователи нажимают кнопку предпочтения, и onActivityResult, который получает путь к изображению на устройстве (все это работает). Печать после того, как я зафиксирую настройки, ничего не выводит.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, SELECT_PICTURE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0);
preferences.edit().putString(SETTINGS_BACKGROUND_IMAGE, "okok");
preferences.edit().commit();
System.out.println("Image" + preferences.getString(SETTINGS_BACKGROUND_IMAGE, ""));
}
}
finish();
}
Ответы
Ответ 1
В документации :
Создайте новый редактор для этих настроек, с помощью которых вы можете сделать изменения данных в предпочтениях и атомарного фиксации эти изменения возвращаются к объекту SharedPreferences.
Поскольку этот новый экземпляр редактора, ваш код должен быть примерно таким:
preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok");
editor.commit();
Ответ 2
Попробуйте другой способ инициализации переменной SharedPreferences:
SharedPreferences sf = PreferenceManager.getDefaultSharedPreferences(this);
Вы также можете связать запись с sf с помощью sf.edit().putString(string, value).commit();
Ответ 3
В моем случае мне пришлось добавить editor.apply(); перед фиксацией для работы.
Это мой код:
preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok");
editor.apply();//I added this line and started to work...
editor.commit();
Ответ 4
ну, основываясь на посте @zrgiu, для меня работало только добавление editor.clear();
перед использованием редактора... итоговый код будет выглядеть примерно так:
preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.clear();
editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok");
editor.commit();
;)
Ответ 5
Имейте в виду, что для сохранения и извлечения данных требуется одно и то же действие. Вы не можете использовать метод, как
public String readValue(Activity activity, String key) {
SharedPreferences sp = activity.getPreferences(Context.Mode_PRIVATE);
//...
}
Для получения тех же данных из одного и того же действия вам нужно вызвать этот метод с тем же действием, в котором вы сохранили свои данные.