我正在寻找一个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”);
我猜它会覆盖他们设置的所有设置。
答案 0 :(得分:21)
SharedPreferences保存在xml文件中。您可以在/data/data/your_application_package/shared_prefs/Name_of_your_preference.xml
中找到它检查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");
问候。
答案 1 :(得分:18)
您可以使用contains
对象上的SharedPreferences
方法检查文件中是否存在您的某个首选项键。如果返回false
,您可以假设这是第一次并填充默认设置。此方法的文档为here。
我找不到任何方法来检查首选项文件是否已经存在(它将在您第一次检索编辑器时自动创建),但是这种方法应该可以解决问题。
答案 2 :(得分:4)
我没有足够的代表来评论natur3的帖子。所以这个答案。
@ 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中的模拟器文件系统来解决这个问题,然后选择“文件资源管理器”。
答案 3 :(得分:2)
而不是硬编码" / data / data /"你可以这样做的路径:
public boolean preferenceFileExist(String fileName) {
File f = new File(getApplicationContext().getApplicationInfo().dataDir + "/shared_prefs/"
+ fileName + ".xml");
return f.exists()
}
答案 4 :(得分:1)
我是这样做的,所以它适应性强。
File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + getPackageName()+ "_preferences.xml");
if(f.exists())
{
//do stuff`enter code here`
}
如果首选项存在与否,我在onCreate的验证过程中使用了这个,并且根据答案启用按钮来清除首选项 - 如果不是手动,只需验证首选项文件的名称在DDMS中的位置命名。
答案 5 :(得分:0)
我找到的最简单的方法, 我们可以通过android
上的内置代码检查共享偏好是否存在 sharePrefName.contains(String key) // as if (userData.contains("name")){Toast // Your data is already here!}
检查首选项是否包含首选项。 (它是抽象的布尔公共方法)
简单易行:)
答案 6 :(得分:0)
这似乎是一个更准确的解决方案
val file = File(filesDir.parent, "shared_prefs/name_of_preference.xml")
或者只是
val file = File(filesDir, "../shared_prefs/name_of_preference.xml")