Deleting shared preferences
如何删除我的应用程序的SharedPreferences数据?
我正在创建一个使用大量Web服务来同步数据的应用程序。 出于测试目的,我需要在重新启动应用程序时擦除一些SharedPreferences值。
删除特定值:SharedPreferences.Editor.remove()后跟
删除所有
如果您不关心返回值,而在应用程序的主线程中使用它,则可以考虑使用
我的解决方案:
1 2 | SharedPreferences preferences = getSharedPreferences("Mypref", 0); preferences.edit().remove("text").commit(); |
删除所有首选项:
1 2 | SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE); settings.edit().clear().commit(); |
删除单个首选项:
1 2 | SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE); settings.edit().remove("KeyName").commit(); |
如果不需要每次都删除它,则可以从以下位置手动删除它:
Settings -> Applications -> Manage applications -> (choose your app)
-> Clear data or Uninstall
较新的Android版本:
Settings -> Applications -> (choose your app) -> Storage -> Clear data
and Clear cache
一行删除Android共享首选项:-)
1 | context.getSharedPreferences("YOUR_PREFS", 0).edit().clear().commit(); |
或
1 | this.getSharedPreferences("YOUR_PREFS", 0).edit().clear().apply(); |
似乎所有解决方案都不完全可行或已过时
清除活动中的所有SharedPreferences
1 2 | PreferenceManager.getDefaultSharedPreferences(getBaseContext()). edit().clear().apply(); |
在onCreate之后从Main Activity调用它
注意*我用过
1 | .apply() |
代替
1 | .commit() |
您可以自由选择commit();
您甚至可以在没有根电话的情况下使用adb shell来执行此操作。唯一的问题是该应用程序必须是可调试的。
1 | run-as <your package name> <command> |
例如:
1 | run-as com.asdf.blah rm /data/data/com.asdf.blah/databases/myDB.db |
或者,您可以执行上述操作,但不执行将命令定向到应用程序包根目录并允许您在应用程序上下文中执行更多命令的命令。
1 2 3 | Editor editor = getSharedPreferences("clear_cache", Context.MODE_PRIVATE).edit(); editor.clear(); editor.commit(); |
全部清除:
1 | PreferenceManager.getDefaultSharedPreferences(context).edit().clear().apply() |
在类定义中
1 2 3 | private static final String PREFERENCES ="shared_prefs"; private static final SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(PREFERENCES, MODE_PRIVATE); |
在班里
1 2 3 | public static void deleteAllSharePrefs(){ sharedPreferences.edit().clear().commit(); } |
试试这个代码:
1 2 3 | SharedPreferences sharedPreferences = getSharedPreferences("fake", Context.MODE_PRIVATE); SharedPreferences.Editor edit = sharedPreferences.edit(); edit.clear().commit(); |
从API 24(牛轧糖)开始,您可以执行以下操作:
1 | context.deleteSharedPreferences("YOUR_PREFS"); |
但是,没有向后兼容性,因此,如果您支持的版本数少于24,请坚持:
1 | context.getSharedPreferences("YOUR_PREFS", Context.MODE_PRIVATE).edit().clear().apply(); |
您也可以只使用设备手动卸载应用。然后,当您重新安装应用程序时,共享的首选项已被重置。
如果是为了您的测试。您可以使用adb命令。
1 | adb shell pm clear <package name> |
- 要删除特定值,
SharedPreferences.Editor remove(String key)后跟commit()或apply()
-
要删除所有值,
SharedPreferences.Editor clear()后跟commit()或apply()
1 2 3 | String prefTag ="someTag"; SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext); prefs.edit().remove(prefTag).commit(); |
这将删除名称为" someTag"的已保存共享首选项。
要从首选项中删除键值对,您可以轻松地执行以下操作
1 | getActivity().getSharedPreference().editor().remove("key").apply(); |
我还开发了用于轻松控制共享首选项的库。您可能会发现以下链接
https://github.com/farruhha/SimplePrefs
要从任何类集中清除所有SharedPreferences:
1 2 3 | public static SharedPreferences.Editor getEditor(Context context) { return getPreferences(context).edit(); } |
然后来自任何类:(提交返回布尔值,您可以在其中检查是否清除了偏好设置)
1 | Navigation.getEditor(this).clear().commit(); |
或者:您可以使用Apply:它返回void
Navigation.getEditor(本).clear()申请()。
由于我有许多共享的首选项键,因此没有答案对我有用。
假设您正在运行的是Android测试而非单元测试。
它为我工作循环并删除所有shared_prefs文件。
@BeforeClass will run before all the tests and ActivityTestRule
1 2 3 4 5 6 7 8 9 10 | @BeforeClass public static void setUp() { Context context = InstrumentationRegistry.getTargetContext(); File root = context.getFilesDir().getParentFile(); String[] sharedPreferencesFileNames = new File(root,"shared_prefs").list(); for (String fileName : sharedPreferencesFileNames) { context.getSharedPreferences(fileName.replace(".xml",""), Context.MODE_PRIVATE).edit().clear().commit(); } } |
1 | new File(context.getFilesDir(), fileName).delete(); |
我可以使用共享首选项删除文件
您可以
今天早上刚做。在命令提示符下:
1 2 3 4 | adb shell cd /data/data/YOUR_PACKAGE_NAME/shared_prefs rm * // to remove all shared preference files rm YOUR_PREFS_NAME.xml // to remove a specific shared preference file |
注意:这需要有根目录的设备,例如库存的Android虚拟设备,Genymotion设备或实际有根目录的手机/平板电脑等。