Общие настройки Android не сохраняются - PullRequest
35 голосов
/ 13 марта 2012

Я создал живые обои для 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();
}

Ответы [ 5 ]

82 голосов
/ 13 марта 2012

Из документации :

Создайте новый редактор для этих предпочтений, с помощью которого вы можете сделать изменения данных в настройках и атомарной фиксации эти изменения обратно в объект SharedPreferences.

Поскольку это новый экземпляр редактора, ваш код должен выглядеть примерно так:

preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok");
editor.commit();
16 голосов
/ 13 марта 2012

Попробуйте другой способ инициализации вашей переменной SharedPreferences:

SharedPreferences sf = PreferenceManager.getDefaultSharedPreferences(this);

Вы также можете записать в цепочку sf с помощью sf.edit().putString(string, value).commit();

0 голосов
/ 03 февраля 2019

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

public String readValue(Activity activity, String key) {
    SharedPreferences sp = activity.getPreferences(Context.Mode_PRIVATE);
   //...
}

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

0 голосов
/ 22 февраля 2018

ну, основываясь на посте @zrgiu, для меня работало только добавление editor.clear(); перед использованием редактора ... поэтому окончательный код будет выглядеть примерно так:

preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.clear();
editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok");
editor.commit();

;)

0 голосов
/ 06 октября 2016

В моем случае мне пришлось добавить 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();
...