如何检查SharedPreferences文件是否存在

我正在寻找一个Android共享首选项,我想知道有没有办法只检查首选项文件是否存在。

SharedPreferences mySharedPreferences ; mySharedPreferences=getSharedPreferences(“Name_of_your_preference”,mode); 

上面的代码让我相信“Name_of_Your_preferene”存储为一个文件或某种包含您的首选项的容器。

我想知道是否在那里检查是否存在。 当用户加载活动时,我想将所有设置保存到此文件中,并带有一些默认值(所有设置均为关闭)。 但是,如果他们第一次访问该页面,我只想这样做。

否则,如果每次页面加载时我都会这样做

 SharedPreferences.Editor editor= mySharedPreferences.edit(); /* now store your primitive type values. In this case it is true, 1f and Hello! World */ editor.putBolean(“myBoolean”,true); editor.putFloat(“myFloat”,1f); editor.putString(“myString”,” Hello! World”); 

我猜它会覆盖他们设置的所有设置。

SharedPreferences保存在xml文件中。 您可以在/data/data/your_application_package/shared_prefs/Name_of_your_preference.xml中find它

要检查SharedPreferences的“Name_of_your_preference”是否存在:

 File f = new File( "/data/data/your_application_package/shared_prefs/Name_of_your_preference.xml"); if (f.exists()) Log.d("TAG", "SharedPreferences Name_of_your_preference : exist"); else Log.d("TAG", "Setup default preferences"); 

问候。

您可以在SharedPreferences对象上使用contains方法来检查文件中是否存在您的某个首选项键。 如果返回false ,则可以假设这是第一次并填充默认设置。 此方法的文档在此处 。

我找不到任何方法来检查首选项文件是否已存在(它将在您第一次检索编辑器时自动创建),但此方法应该可以解决问题。

我没有足够的代表来评论natur3的post。 所以这个答案。

@ natur3:非常有帮助,谢谢你。 我讨厌一个小问题……文件后缀。 如果我像这样定义我的文件名:

  private static final String FILENAME = "myPrefs"; 

然后使用:

  File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + FILENAME); 

即使文件系统上存在该文件,f.exists()也将返回false。 这是因为Android在编写SharedPreferences时会自动添加“.xml”后缀,因此我必须使我的文件引用如下所示:

  File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + FILENAME + ".xml"); 

它的工作原理。 我不知道你从哪里得到了你的“_preferences.xml”后缀。

我设法通过使用Window-> Show View-> Other …在Eclipse中浏览模拟器文件系统来解决这个问题,然后选择“文件资源管理器”。

您可以执行以下操作,而不是对“/ data / data /”路径进行硬编码:

 public boolean preferenceFileExist(String fileName) { File f = new File(getApplicationContext().getApplicationInfo().dataDir + "/shared_prefs/" + fileName + ".xml"); return f.exists() } 

我是这样做的,所以它的适应性非常好。

 File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + getPackageName()+ "_preferences.xml"); if(f.exists()) { //do stuff`enter code here` } 

我在onCreate的validation过程中使用了这个,如果首选项存在与否,并且根据答案启用按钮来清除首选项 – 如果未手动命名,只需validation首选项文件的名称在DDMS中的位置。

我发现最简单的方法,我们可以通过android上的内置代码检查共享偏好是否存在

  sharePrefName.contains(String key) // as if (userData.contains("name")){Toast // Your data is already here!} 

检查首选项是否包含首选项。 (这是抽象的布尔公共方法)

简单易用:)