Как я могу получить 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. Какое имя или как я могу получить его?
6 ответов
import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);
Обновить
Согласно общим настройкам | Учебник для разработчиков Android (часть 13) Сай Гита М.Н.,
Многие приложения могут предоставлять способ захвата пользовательских настроек в настройках конкретного приложения или действия. Для поддержки этого Android предоставляет простой набор API.
Предпочтения обычно представляют собой пары имя-значение. Они могут быть сохранены как "Общие настройки" для различных действий в приложении (обратите внимание, что в настоящее время они не могут быть разделены между процессами). Или это может быть что-то, что должно быть сохранено для определенной деятельности.
Общие предпочтения. Общие предпочтения могут использоваться всеми компонентами (действиями, службами и т. Д.) Приложений.
Предпочтения, связанные с обработкой действий: эти предпочтения могут использоваться только в рамках конкретного действия и не могут использоваться другими компонентами приложения.
Общие настройки:
Общие настройки управляются с помощью 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
объект должен быть использован. 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 на сайте разработчиков.
Если у вас нет доступа к getDefaultSharedPreferenes()
, ты можешь использовать getSharedPreferences(name, mode)
вместо этого вам просто нужно передать правильное имя.
Android создает это имя (возможно, на основе имени пакета вашего проекта?). Вы можете получить его, поместив следующий код в SettingsActivity
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);
}
Затем вызывайте это, когда хотите поставить преф:
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);
Если у вас есть флажок, и вы хотите получить его значение, то есть истина / ложь в любом файле Java -
Use--
Context mContext;
boolean checkFlag;
checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`
ОБНОВЛЕНИЕ 2018:
Вы можете просто использовать PowerPreference
библиотека
https://github.com/AliEsaAssadi/Android-Power-Preference
Получение экземпляра общего предпочтения
Чтобы получить экземпляр по умолчанию, вам просто нужно позвонить
PowerPreference.defult()
Или, если вы хотите конкретный файл настроек
PowerPreference.name(fileName)
Запись данных:
PowerPreference.defult().put(key,value)
Получение данных
PowerPreference.defult().getString(key,value)
Попробуйте следующий исходный код, он сработал для меня
//Fetching id from shared preferences
SharedPreferences sharedPreferences;
sharedPreferences =getSharedPreferences(Constant.SHARED_PREF_NAME, Context.MODE_PRIVATE);
getUserLogin = sharedPreferences.getString(Constant.ID_SHARED_PREF, "");