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 автоматически распределяются между действиями внутри одного и того же пакета, так как я думал, что они работают.
Ответы
Ответ 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 в некоторых случаях.