Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Android中的PreferenceActivity获取SharedReference?_Java_Android_Sharedpreferences_Preferenceactivity - Fatal编程技术网

Java 如何从Android中的PreferenceActivity获取SharedReference?

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

我正在使用PreferenceActivity来显示我的应用程序的一些设置。我通过一个xml文件扩展设置,因此我的onCreate(和complete类方法)如下所示:

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在哪里