【问题标题】:When is a shared preferences file first created?何时首次创建共享首选项文件?
【发布时间】:2012-03-05 06:43:17
【问题描述】:

我想知道第一次创建共享首选项文件是什么时候?

我有以下代码:

<?xml version="1.0" encoding="utf-8"?>  
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">  
    <PreferenceCategory android:title="User settings">  
        <EditTextPreference android:title="User Name"
        android:key="userName" android:summary="Please Enter User Name"></EditTextPreference>  
        <EditTextPreference android:title="Password"
        android:key="password" android:summary="Password Here"
        android:inputType="textPassword"></EditTextPreference>
</PreferenceCategory>  

</PreferenceScreen>  


  public class PrefsActivity extends PreferenceActivity {  
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        addPreferencesFromResource(R.xml.prefs);  
    }  
}  

另外,我如何使用带有文件名的 getSharedpreference()?我不知道我是否必须先创建这个文件并将它放在应用程序的数据目录中?

我的意思是第一次创建共享首选项文件的时间是:安装应用程序时,还是稍后?如果以后,什么时候?

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:

    getSharedPreferences(name, mode) 方法会自动创建指定名称的文件,因此您无需创建它。实际上,此首选项文件的确切位置和名称没有记录,所以我建议您在尝试access this file directly 时不要依赖某些约定,因为将来可能会更改位置和名称 - SharedPreferences 应该成为访问此文件的唯一方法。

    第一次调用getSharedPreferences(name, mode)addPreferencesFromResource(preferencesResId) 时会创建具有特定名称的首选项文件。

    【讨论】:

      【解决方案2】:

      我不是 100% 确定你在说什么。

      在处理 PreferenceScreens 或 SharedPreferences 时,您不需要创建任何文件。这是由 SharedPreferences 在幕后处理的。我相信当您第一次在“首选项”屏幕中设置值时会发生这种情况,但老实说我不确定。

      SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
      String username = preferences.getString("username", "defaultvalue");
      String password = preferences.getString("password", "defaultvalue");
      

      一旦设置,该代码将获取 PreferenceScreen 的 SharedPreferences。如果尚未设置,则使用默认值。

      【讨论】:

      • 谢谢。我的意思是共享首选项文件是什么时候首次创建的:应用程序安装时,还是稍后?如果以后,什么时候?
      • 我相信它是在第一次出现 PreferenceScreen 时创建的,或者是在用户首次设置 PreferenceScreen 中的项目时创建的。正如我之前所说,我对此并不完全确定。
      【解决方案3】:

      共享首选项将在 /data/data/appname/shared_prefs/prefs_name.xml 下创建

      【讨论】:

        【解决方案4】:

        正如其他 cmets 所述,您永远不会直接与共享首选项文件进行交互。您可以使用 SharedPreferences 对象读取和写入值。 Context.getSharedPreferences() 方法接受一个字符串作为它的第一个参数(您要与之交互的共享首选项文件的名称)并返回一个SharedPreferences 对象。根据documentation for the getSharedPreferences() method:

        如果此名称的首选项文件不存在,它将在您检索编辑器 (SharedPreferences.edit()) 并提交更改 (Editor.commit()) 时创建。

        所以那是共享首选项文件的创建时间。其他返回 SharedPreferences 对象的方法只是在不同的上下文中做同样的事情。

        例如:

        Activity.getPreferences() 方法

        只需通过传入此活动的类名作为首选项名称来调用底层的 getSharedPreferences(String, int) 方法。

        【讨论】:

          【解决方案5】:

          每当我们调用 menthod getSharedPreferences("file_name", mode) 它将检查与我们提供的文件名对应的xml文件是否已经存在,如果它已经存在,它将使用现有的文件进行我们正在执行的操作,否则它将创建一个名为我们的新文件提供

          我们可以在 Android studio Device File Explorer->data/data//shared_prefs 文件夹中查看这个文件

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-04-01
            • 2017-10-23
            • 1970-01-01
            • 2012-09-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多