Java 如何从Android中的PreferenceActivity获取SharedReference?
我正在使用PreferenceActivity来显示我的应用程序的一些设置。我通过一个xml文件扩展设置,因此我的onCreate(和complete类方法)如下所示:Java 如何从Android中的PreferenceActivity获取SharedReference?,java,android,sharedpreferences,preferenceactivity,Java,Android,Sharedpreferences,Preferenceactivity,我正在使用PreferenceActivity来显示我的应用程序的一些设置。我通过一个xml文件扩展设置,因此我的onCreate(和complete类方法)如下所示: public class FooActivity extends PreferenceActivity { @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); addPreferencesF
public class FooActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.preference);
}
}
PreferenceActivity的javadoc声明
当用户与这些首选项交互时,这些首选项将自动保存到SharedReferences。要检索此活动中的首选项层次结构将使用的SharedReferences实例,请使用与此活动相同的包中的上下文调用GetDefaultSharedReferences(android.content.Context)
但是我如何在另一个活动中获得SharedReference的名称呢?我只能打电话
getSharedPreferences(name, mode)
在其他活动中,但我需要PreferenceActivity使用的SharedReference的名称。名称是什么或如何检索它
import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);
更新
根据Sai Geetha M N的说法
许多应用程序可能会提供一种方法来捕获网络上的用户首选项
特定应用程序或活动的设置。支持
因此,Android提供了一组简单的API
首选项通常是名称-值对。它们可以存储为
应用程序中不同活动的“共享首选项”(注意
目前无法跨进程共享)。也可能是这样
特定于某个活动需要存储的东西
Context
类的getSharedReferences
方法进行管理。首选项存储在默认文件(1)中,或者您可以指定用于引用首选项的文件名(2)
SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
(1) 建议使用默认模式,而不指定文件名
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
(2) 下面是指定文件名时获取实例的方式
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
模式\u PRIVATE
是首选项的操作模式。这是默认模式,意味着创建的文件将仅由调用应用程序访问。支持的其他两种模式是MODE\u WORLD\u READABLE
和MODE\u WORLD\u WRITEABLE
。在模式\u WORLD\u READABLE
中,其他应用程序可以读取创建的文件,但不能修改它。在MODE\u WORLD\u WRITEABLE
的情况下,其他应用程序也对创建的文件具有写入权限
最后,拥有preferences实例后,下面是如何从preferences中检索存储值的方法:
int storedPreference = preferences.getInt("storedInt", 0);
要在首选项文件SharedReference.Editor
中存储值,必须使用对象<代码>编辑器是SharedReference
类中的嵌套接口
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
编辑器还支持remove()
和clear()
等方法从文件中删除首选项值
活动首选项:
共享首选项可由其他应用程序组件使用。但是,如果您不需要与其他组件共享首选项,并且希望拥有活动专用首选项,则可以借助活动的getPreferences()
方法来实现。getPreference
方法使用带有活动类名称的getSharedReferences()
方法作为首选项文件名
下面是获取首选项的代码
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
的包。该包定义用于实现应用程序首选项UI的类
要查看更多示例,请查看Android开发者网站上的帖子。如果您无权访问
GetDefaultSharedReferences()
,您可以使用GetSharedReferences(名称、模式)
,而只需输入正确的名称即可
Android创建这个名称(可能基于您项目的包名?)。您可以通过将以下代码放入设置活动onCreate()
,并查看首选项名称是什么来获得它
String preferencesName = this.getPreferenceManager().getSharedPreferencesName();
字符串应该类似于com.example.projectname\u首选项
。将其硬编码到项目中的某个位置,并将其传递到getSharedReferences()
,您就可以开始了。首先声明这些方法
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());
当您想要获取pref时,请调用此选项:
getPref("myKey", getApplicationContext());
或您可以使用此对象
这进一步简化了一切
例如:
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文件中获取它的值,即true/false--
使用--
试试下面的源代码,它对我有用
//Fetching id from shared preferences
SharedPreferences sharedPreferences;
sharedPreferences =getSharedPreferences(Constant.SHARED_PREF_NAME, Context.MODE_PRIVATE);
getUserLogin = sharedPreferences.getString(Constant.ID_SHARED_PREF, "");
+1:你救了我一天。。互联网上的教程/示例都没有提到这一点。他们谈论的都是abt功能和定制,但不是如何阅读。请参阅我的答案更新,文件名类似于package.prefs
,但我不确定。谢谢你的代码。有一点让我困惑:SharedReference是一个接口,那么实际的代码impl在哪里