我允许用户创建多个SharedPreferences
文件,但我也希望他们选择删除这些文件。我知道我可以使用内部存储,但这不是我的问题。
我的问题是:“我如何删除代码或手动(不仅仅是清除)SharedPreferences
文件?”
答案 0 :(得分:32)
如果您通过SharedPreferences
获得Context.getSharedPreferences("X")
个实例,那么您的文件将被命名为X.xml
。
它位于/data/data/com.your.package.name/shared_prefs/X.xml
。您只需从该位置删除该文件即可。同时检查/data/data/com.your.package.name/shared_prefs/X.bak
文件,如果存在,也将其删除。
但请注意,SharedPreferences
实例会将所有数据保存在内存中。因此,您需要首先清除首选项,提交更改,然后才删除首选项备份文件。
这应该足以实现您的设计决策。
答案 1 :(得分:24)
这是一种清除给定上下文的所有SharedPreferences的简单方法,对于单元测试很有用
public static void clearSharedPreferences(Context ctx){
File dir = new File(ctx.getFilesDir().getParent() + "/shared_prefs/");
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
// clear each of the prefrances
ctx.getSharedPreferences(children[i].replace(".xml", ""), Context.MODE_PRIVATE).edit().clear().commit();
}
// Make sure it has enough time to save all the commited changes
try { Thread.sleep(1000); } catch (InterruptedException e) {}
for (int i = 0; i < children.length; i++) {
// delete the files
new File(dir, children[i]).delete();
}
}
请注意,使用时您使用的是Android单元测试。并且您在Application
类中使用共享偏好,这可能会导致竞争条件,并且可能无法正常工作。
答案 2 :(得分:6)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
context.deleteSharedPreferences(preferencesKey);
} else {
try {
FileUtils.cleanDirectory(new File(context.getCacheDir().getParent() + "/shared_prefs/"));
} catch (IOException e) {
Log.e(TAG, "Cannot delete files in shared pref directory", e);
}
}
答案 3 :(得分:2)
简单的天才!
您的默认SD卡preference.xml文件路径可能是: / data / data /您的包名/ shared_prefs /您的共享首选项xml文件。
喜欢, /data/data/com.hirecraft.hirecraftmanager/shared_prefs/swipe_preferences.xml 。
删除偏好设置xml文件:
File deletePrefFile = new File("/data/data/com.hirecraft.hirecraftmanager/shared_prefs/swipe_preferences.xml");
deletePrefFile.delete();
或者在String中获取文件路径,如
String filePath = getApplicationContext().getFilesDir().getParent()+"/shared_prefs/swipe_preferences.xml";
File deletePrefFile = new File(filePath );
deletePrefFile.delete();