Подтвердить что ты не робот

Общие настройки 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();
}
4b9b3361

Ответ 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);
   //...
}

Для получения тех же данных из одного и того же действия вам нужно вызвать этот метод с тем же действием, в котором вы сохранили свои данные.