How do I get the SharedPreferences from a PreferenceActivity in Android?
我正在使用首选项活动显示应用程序的某些设置。我正在通过一个XML文件对设置进行扩展,以便我的onCreate(和完整的类方法)如下所示:
1 2 3 4 5 6 7 | public class FooActivity extends PreferenceActivity { @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.preference); } } |
PreferenceActivity的JavaDoc说明
These preferences will automatically save to SharedPreferences as the user interacts with them. To retrieve an instance of SharedPreferences that the preference hierarchy in this activity will use, call getDefaultSharedPreferences(android.content.Context) with a context in the same package as this activity.
但如何在另一个活动中获取共享引用的名称?我只能打电话
1 | getSharedPreferences(name, mode) |
在另一个活动中,但我需要由PreferenceActivity使用的SharedReference的名称。名称是什么,或者如何检索?
1 2 3 4 | import android.preference.PreferenceManager; SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); // then you use prefs.getBoolean("keystring", true); |
更新
根据Sai Geetha M N的共享偏好Android开发者教程(第13部分)。
Many applications may provide a way to capture user preferences on the
settings of a specific application or an activity. For supporting
this, Android provides a simple set of APIs.Preferences are typically name value pairs. They can be stored as
"Shared Preferences" across various activities in an application (note
currently it cannot be shared across processes). Or it can be
something that needs to be stored specific to an activity.
共享首选项:共享首选项可由应用程序的所有组件(活动、服务等)使用。
活动处理的首选项:这些首选项只能在特定活动中使用,不能由应用程序的其他组件使用。
共享首选项:
共享偏好由
(1)建议的方法是在默认模式下使用,而不指定文件名
1 | SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); |
(2)下面是在指定文件名时如何获取实例
1 2 | public static final String PREF_FILE_NAME ="PrefFile"; SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); |
最后,一旦您有了Preferences实例,下面是如何从Preferences中检索存储的值:
1 | int storedPreference = preferences.getInt("storedInt", 0); |
要在首选项文件中存储值,必须使用
1 2 3 | SharedPreferences.Editor editor = preferences.edit(); editor.putInt("storedInt", storedPreference); // value to store editor.commit(); |
编辑器还支持像
活动首选项:
共享首选项可由其他应用程序组件使用。但是,如果您不需要与其他组件共享首选项,并且希望拥有活动私有首选项,那么您可以借助活动的
下面是获取首选项的代码
1 2 | SharedPreferences preferences = getPreferences(MODE_PRIVATE); int storedPreference = preferences.getInt("storedInt", 0); |
存储值的代码也与共享首选项的代码相同。
1 2 3 4 | SharedPreferences preferences = getPreference(MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putInt("storedInt", storedPreference); // value to store editor.commit(); |
您还可以使用其他方法,如在数据库中存储活动状态。注:Android还包含一个名为
要查看更多示例,请查看开发者网站上的Android数据存储帖子。
如果你没有访问
Android创建此名称(可能基于项目的包名称?).您可以通过将以下代码放入
1 | String preferencesName = this.getPreferenceManager().getSharedPreferencesName(); |
字符串应该类似于
首先声明这些方法。
1 2 3 4 5 6 7 8 9 10 11 | 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时调用这个:
1 | putPref("myKey","mystring", getApplicationContext()); |
当您想获得首选项时,请调用此选项:
1 | getPref("myKey", getApplicationContext()); |
也可以使用此对象https://github.com/kcochibili/tinydb--android-shared-preferences-turbo更进一步简化了一切
例子:
1 2 3 4 5 6 7 8 9 10 11 | 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); |
在任何地方都必须传递上下文,这真的让我恼火。代码变得过于冗长,无法管理。我在每个项目中都这样做…
1 2 | public class global { public static Activity globalContext = null; |
并在主活动中设置它创建
1 2 3 4 5 6 7 8 9 10 11 | @Override public void onCreate(Bundle savedInstanceState) { Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler( global.sdcardPath, "")); super.onCreate(savedInstanceState); //Start //Debug.startMethodTracing("appname.Trace1"); global.globalContext = this; |
而且所有的偏好键都应该独立于语言,我很惊讶没有人提到这一点。
1 | getText(R.string.yourPrefKeyName).toString() |
现在在一行代码中这样简单地调用它
1 | global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true); |
如果您有一个复选框,您希望在任何Java文件中获取它的值Itrue(false)。
使用——
1 2 3 4 | Context mContext; boolean checkFlag; checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);` |
更新2019
您可以简单地使用
https://github.com/aliesaassadi/android-power-preference
正在获取共享首选项实例要获取默认实例,只需调用
1 | PowerPreference.getDefaultFile() |
或者如果您想要一个特定的首选项文件
1 | PowerPreference.getFileByName(fileName) |
写作数据:
1 | PowerPreference.getDefaultFile().put(key,value) |
获取数据
1 | PowerPreference.getDefaultFile().getString(key,value) |