Android-如何在代码中设置首选项

Android-如何在代码中设置首选项,android,sharedpreferences,android-preferences,Android,Sharedpreferences,Android Preferences,我有一个Android应用程序,其中我的首选项保存在一个XML文件中,运行良好。现在,我想使用代码设置一个首选项,而不是显示整个首选项屏幕,我该如何执行此操作?我假设您的首选项是指应用程序的首选项,而不是Android手机设置 要在应用程序运行之间存储首选项,需要执行以下操作 创建SharedReferences对象 SharedPreferences settings = getSharedPreferences(String n, MODE_PRIVATE); 字符串n标识您的首选项,第二

我有一个Android应用程序,其中我的首选项保存在一个XML文件中,运行良好。现在,我想使用代码设置一个首选项,而不是显示整个首选项屏幕,我该如何执行此操作?

我假设您的首选项是指应用程序的首选项,而不是Android手机设置

要在应用程序运行之间存储首选项,需要执行以下操作

  • 创建SharedReferences对象

    SharedPreferences settings = getSharedPreferences(String n, MODE_PRIVATE);
    
    字符串n标识您的首选项,第二个参数是访问它们的模式

  • 实例化编辑器对象

    SharedPreferences.Editor editor = settings.edit();
    
    注意:不要尝试settings.editor.edit(),这将不会生成持久对象,下面的代码也不会工作

  • 将首选项写入缓冲区

    editor.put...(String, value)
    
    editor.commit();
    
    有许多put函数、putString、putBoolean等。字符串是键(“版本”、“良好运行”),值是值(“1.5.2”,true)

  • 刷新缓冲区

    editor.put...(String, value)
    
    editor.commit();
    
    这实际上会将您放入首选项。如果您的应用程序在此行之前崩溃,则不会写入首选项。还有一个记录在案的错误:commit()应该返回一个表示成功或失败的布尔值。上次我检查时,它总是返回false

  • 这些首选项将存储在手机上,并且只有您的应用程序才能访问


    更多文档是

    我尝试了这个,但没有成功:

    SharedPreferences settings = getSharedPreferences(String n, MODE_PRIVATE);
    
    请尝试以下方法:

    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
    

    您可以使用下面的代码在SharedReferences中保存一些内容

    public static void save(String valueKey, String value) {
        SharedPreferences prefs = PreferenceManager
                .getDefaultSharedPreferences(context);
        SharedPreferences.Editor edit = prefs.edit();
        edit.putString(valueKey, value);
        edit.commit();
        }
    
    要阅读首选项,请执行以下操作:

    public static String read(String valueKey, String valueDefault) {
        SharedPreferences prefs = PreferenceManager
                .getDefaultSharedPreferences(context);
       return prefs.getString(valueKey, valueDefault);
    }
    

    实际上,您可以使用一个行程序:prefs.edit().putInt(key,value.commit();你知道这与PreferenceActivity有何不同吗?你是否可以参考PreferenceActivity的一个示例?如果你不关心返回值,文档会说,由于API级别9,你可以更好地调用
    apply()而不是
    commit()虽然我在这里晚了5年,但是当我想通过java而不是xml文件为我的首选项创建一个新的布尔值时,使用@tomash建议的方法失败了。虽然在钥匙创建后使用他的线条确实有效。有人能解释一下威尔和托马什的区别吗?他们不是都做同样的事吗?@OmarBizreh-托马什所说的(一行)与威尔回答的第2-4行完全相同。(当然,您仍然需要创建一个preferences对象(第1行))。我不知道如果您在创建首选项之前尝试第1行,然后稍后尝试使用pref ob,会发生什么-您就是这么做的吗?如果是这样,那么解决方案是:在代码中创建首选项的任何地方(设置键),也设置保存pref ob的类global。或者只是为了安全起见,每次都做第1行……说什么出了问题,而不是说“没用”,会更有用。(它没有编译?当你运行它时它崩溃了?返回的首选项列表是空的?)然而,+1是一个好提示:看看我的应用程序,你的行是用来访问MainActivity设置的;原始答案的行可以选择性地用于从PreferenceFragment(包含描述用于显示/更改首选项的小部件的XML的片段)中的代码访问设置