SharedPreferences не будет делиться между действиями - программирование
Подтвердить что ты не робот

SharedPreferences не будет делиться между действиями

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

Так, например. У меня есть активность аудио настроек, в которой пользователь может присвоить значение переменной "musicVolume", которая сохраняется. Если я закрою игру и перезагружу ее, то действие настроек звука "запоминает" значение. Но если я попытаюсь загрузить значение в любую другую деятельность, это не сработает. Но они могут загружать и сохранять свои собственные переменные с тем же именем.

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

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

public void SavePreferences(String key, float value) {
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putFloat(key, value);
        editor.commit();
}

public void LoadPreferences() {
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        musicVolume = sharedPreferences.getFloat("musicVolume", (float)0.123);
        soundEffectsVolume = sharedPreferences
                        .getFloat("soundEffectsVolume", (float)0.123);
}

public void ClearPreferences() {
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.clear();
        editor.commit();
}

** Я знаю, что есть лучший способ сделать это, но я очень начинающий программист. Я попытался следовать совету другого потока

Общие настройки Android

но везде, где я пытался поместить строки

protected AppPreferences appPrefs;
appPrefs = new AppPreferences(getApplicationContext());

Я получаю ошибку того или иного типа. Но самое главное, читая другие комментарии к потоку, люди говорят, что SharedPreferences автоматически распределяются между действиями внутри одного и того же пакета, так как я думал, что они работают.

4b9b3361

Ответ 1

Вы используете getPreferences (MODE). Используйте getSharedPreferences ( "PREF_NAME", MODE). Таким образом вы предоставите имя для определенного предпочтения, а затем вы можете вызвать его по имени (PREF_NAME здесь) из любой требуемой активности.

//------get sharedPreferences

SharedPreferences pref = context.getSharedPreferences("PREF_NAME", Context.MODE_PRIVATE);

//-------get a value from them

pref.getString("NAME", "Android");

//--------modify the value

pref.edit().putString("NAME", "Simone").commit();

//--------reset preferences

pref.edit().clear().commit();

Ответ 2

Как было сказано, используйте getSharedPreferences(String name, int mode), а не getPreferences (int mode). В частности, если вы заинтересованы, документация по этим двум методам иллюстрирует разницу. Согласно документации по Android getPreferences(int) выполняет следующие действия:

Получить объект SharedPreferences для доступа к предпочтениям, которые частный для этой деятельности. Это просто вызывает getSharedPreferences (String, int), передав в этой операции имя класса в качестве имени предпочтительности.

Ответ 3

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

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

Вот отличная запись с более подробной информацией, так как вы делаете все правильно, кроме как получить свой дескриптор. Как получить SharedPreferences из PreferenceActivity в Android?

ТАКЖЕ: Не забывайте, что новый способ - вызвать .apply() вместо .commit() Это было в одном из видео # io2012.

Ответ 4

Вы должны использовать этот

SharedPreferences pref = context.getSharedPreferences("PREF_NAME", Context.MODE_PRIVATE);

или

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);

Ответ 5

Если у вас была какая-то проблема как я, это очень просто. Когда вы хотите сохранить настройки, сохраните как:

SharedPreferences sp = getSharedPrefenreces("Preference",MODE_PRIVATE);

И нет:

 SharedPreferences sp = getSharedPrefenreces("Preference name",Context.MODE_PRIVATE);

Я знаю, насколько важны SharedPrefenrences в некоторых случаях.