Как получить SharedPreferences из PreferenceActivity в Android?
Я использую функцию PreferenceActivity, чтобы показать некоторые настройки для моего приложения. Я раздуваю настройки с помощью XML файла, так что мой метод onCreate (и полный класс) выглядит следующим образом:
public class FooActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.preference);
}
}
В javadoc PreferenceActivity PreferenceFragment указано, что
Эти настройки автоматически сохраняются в SharedPreferences, когда пользователь взаимодействует с ними. Чтобы получить экземпляр SharedPreferences, который будет использовать иерархия предпочтений в этом действии, вызовите getDefaultSharedPreferences (android.content.Context) с контекстом в том же пакете, что и это действие.
Но как я получаю имя SharedPreference в другой активности? Я могу только позвонить
getSharedPreferences(name, mode)
в другой активности, но мне нужно имя SharedPreference, которое использовалось PreferenceActivity. Какое имя или как я могу его получить?
Ответы
Ответ 1
import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);
Обновить
Согласно общим предпочтениям | Android Developer Tutorial (часть 13) от Sai Geetha MN,
Многие приложения могут обеспечить способ захвата пользовательских настроек в настройках конкретного приложения или активности. Для поддержки этого Android предлагает простой набор API.
Предпочтения - это, как правило, пары значений имени. Они могут храниться как "Общие предпочтения" в различных действиях в приложении (обратите внимание, что в настоящее время они не могут быть разделены между процессами). Или это может быть что-то, что необходимо сохранить для конкретной деятельности.
-
Общие предпочтения. Общие настройки могут использоваться всеми компонентами (действиями, услугами и т.д.) Приложений.
-
Действия, обработанные обработкой: эти предпочтения могут использоваться только в рамках конкретного вида деятельности и не могут использоваться другими компонентами приложения.
Общие настройки:
getSharedPreferences
настройки управляются с помощью метода getSharedPreferences
класса Context
. Настройки сохраняются в файле по умолчанию (1) или вы можете указать имя файла (2), которое будет использоваться для ссылки на настройки.
(1) Рекомендуемый способ - использовать по умолчанию режим без указания имени файла
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
(2) Вот как вы получаете экземпляр при указании имени файла
public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
MODE_PRIVATE
- это режим работы для настроек. Это режим по умолчанию и означает, что к созданному файлу будет обращаться только вызывающее приложение. Другие поддерживаемые два режима: MODE_WORLD_READABLE
и MODE_WORLD_WRITEABLE
. В MODE_WORLD_READABLE
другое приложение может читать созданный файл, но не может его модифицировать. В случае MODE_WORLD_WRITEABLE
других приложений также есть права на запись для созданного файла.
Наконец, как только у вас есть экземпляр предпочтений, вот как вы можете получить сохраненные значения из настроек:
int storedPreference = preferences.getInt("storedInt", 0);
Для хранения значений в файле предпочтений SharedPreference.Editor
объект SharedPreference.Editor
. Editor
представляет собой вложенный интерфейс в классе SharedPreference
.
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
Редактор также поддерживает такие методы, как remove()
и clear()
чтобы удалить значения предпочтений из файла.
Предпочтения деятельности:
Общие предпочтения могут использоваться другими компонентами приложения. Но если вам не нужно делиться предпочтениями с другими компонентами и вы хотите иметь частные настройки активности, вы можете сделать это с помощью метода getPreferences()
активности. Метод getPreference
использует метод getSharedPreferences()
с именем класса активности для имени файла предпочтения.
Ниже приведен код для получения предпочтений
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);
Код для хранения значений также такой же, как в случае общих настроек.
SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
Вы также можете использовать другие методы, такие как сохранение состояния активности в базе данных. Примечание. Android также содержит пакет под названием android.preference
. Пакет определяет классы для реализации пользовательского интерфейса приложений.
Чтобы увидеть еще несколько примеров, зайдите на сайт разработчиков Android Data Storage на сайте разработчиков.
Ответ 2
Если у вас нет доступа к getDefaultSharedPreferenes()
, вы можете использовать getSharedPreferences(name, mode)
вместо этого, вам просто нужно передать правильное имя.
Android создает это имя (возможно, на основе имени пакета вашего проекта?). Вы можете получить его, поместив следующий код в SettingsActivity
onCreate()
и увидев, что такое preferencesName
.
String preferencesName = this.getPreferenceManager().getSharedPreferencesName();
Строка должна быть чем-то вроде com.example.projectname_preferences
. Жесткий код, который где-то в вашем проекте, и передать его в getSharedPreferences()
, и вам должно быть хорошо идти.
Ответ 3
Сначала объявите эти методы.
public static void putPref(String key, String value, Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}
public static String getPref(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(key, null);
}
Затем вызовите это, когда вы хотите поместить pref:
putPref("myKey", "mystring", getApplicationContext());
вызовите это, когда вы хотите получить префикс:
getPref("myKey", getApplicationContext());
Или вы можете использовать этот объект https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo
что еще более упрощает все
Пример:
TinyDB tinydb = new TinyDB(context);
tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);
tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true);
tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);
Ответ 4
чтобы передать контекст во всем мире, действительно раздражает меня. код становится слишком многословным и неуправляемым. Я делаю это в каждом проекте вместо этого...
public class global {
public static Activity globalContext = null;
и установите его в основной активности, создайте
@Override
public void onCreate(Bundle savedInstanceState) {
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
global.sdcardPath,
""));
super.onCreate(savedInstanceState);
//Start
//Debug.startMethodTracing("appname.Trace1");
global.globalContext = this;
все ключи предпочтений должны быть независимыми от языка, я шокирован, никто не упомянул об этом.
getText(R.string.yourPrefKeyName).toString()
теперь называют это очень просто так в одной строке кода
global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);
Ответ 5
если у вас есть флажок, и вы хотите получить его значение, т.е. true/false в любом java файле -
Использование -
Context mContext;
boolean checkFlag;
checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`
Ответ 6
Обновлено 2019
Вы можете просто использовать библиотеку PowerPreference
https://github.com/AliEsaAssadi/Android-Power-Preference
Получение экземпляра общего предпочтения
Чтобы получить экземпляр по умолчанию, вам просто нужно позвонить
PowerPreference.getDefaultFile()
Или, если вы хотите конкретный файл настроек
PowerPreference.getFileByName(fileName)
Запись данных:
PowerPreference.getDefaultFile().put(key,value)
Получение данных
PowerPreference.getDefaultFile().getString(key,value)