Как получить SharedPreferences из PreferenceActivity в Android?

Я использую функцию PreferenceActivity, чтобы показать некоторые настройки для моего приложения. Я раздуваю настройки через xml-файл, чтобы мой метод onCreate (и полный class) выглядел следующим образом:

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. Какое имя или как я могу его получить?

 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.

Предпочтения – это, как правило, пары значений имени. Они могут храниться как «Общие предпочтения» в различных действиях в приложении (обратите внимание, что в настоящее время они не могут быть разделены между процессами). Или это может быть что-то, что необходимо сохранить для конкретной деятельности.

  1. Общие предпочтения. Общие настройки могут использоваться всеми компонентами (действиями, услугами и т. Д.) Приложений.

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

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

getSharedPreferences настройки управляются с помощью метода getSharedPreferences classа 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 представляет собой вложенный интерфейс в classе SharedPreference .

 SharedPreferences.Editor editor = preferences.edit(); editor.putInt("storedInt", storedPreference); // value to store editor.commit(); 

Редактор также поддерживает такие методы, как remove() и clear() чтобы удалить значения предпочтений из файла.

Предпочтения деятельности:

Общие предпочтения могут использоваться другими компонентами приложения. Но если вам не нужно делиться предпочтениями с другими компонентами и вы хотите иметь частные настройки активности, вы можете сделать это с помощью метода getPreferences() активности. Метод getPreference использует метод getSharedPreferences() с именем classа активности для имени файла предпочтения.

Ниже приведен код для получения предпочтений

 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 . Пакет определяет classы для реализации пользовательского интерфейса приложений.

Чтобы увидеть еще несколько примеров, отметьте запись в хранилище данных Android на сайте разработчиков.

Если у вас нет доступа к getDefaultSharedPreferenes() , вы можете использовать getSharedPreferences(name, mode) вместо этого, вам просто нужно передать правильное имя.

Android создает это имя (возможно, на основе имени пакета вашего проекта?). Вы можете получить его, поместив следующий код в onCreate() и посмотрев, что такое preferencesName .

 String preferencesName = this.getPreferenceManager().getSharedPreferencesName(); 

Строка должна быть чем-то вроде com.example.projectname_preferences . Жесткий код, который где-то в вашем проекте, и передать его в getSharedPreferences() и вам должно быть хорошо идти.

Сначала объявляйте эти методы ..

 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); 

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

 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); 

если у вас есть флажок, и вы хотите получить его значение, т.е. true / false в любом java-файле –

Use–

 Context mContext; boolean checkFlag; checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);` 
Давайте будем гением компьютера.