如何在Android应用程序中删除共享首选项数据

590

如何删除应用程序的SharedPreferences数据?

我正在创建一个使用许多网络服务同步数据的应用程序。出于测试目的,当我重新启动应用程序时,我需要清除一些SharedPreferences值。

29个回答

987

移除特定的值:使用SharedPreferences.Editor.remove() 方法,然后调用 commit()

移除所有值:使用 SharedPreferences.Editor.clear() 方法,然后调用 commit()

如果您不关心返回值且在应用程序的主线程中使用此方法,请考虑使用apply()


290
context.getSharedPreferences("YOUR_PREFS", 0).edit().clear().commit(); //移除所有的偏好设置 :) - rubdottocom
3
@yoshi,肯定有一个remove()和一个clear()。使用remove()来删除特定的偏好设置,使用clear()来删除所有偏好设置。原始问题不清楚是否需要全部删除。 - Mark B
11
清除偏好设置文件似乎并没有真正删除它。在我的测试中,通过观察应用程序信息面板中列出的“数据”使用情况,创建新的SharedPreference文件会将4KB添加到该值,但是使用editor.clear().commit()不会减少这个数字。 - Code Commander
2
@rubdottocom 为什么不把你的评论作为一个单独的答案呢? - technophyle
13
建议改用 .apply() 而非 .commit()。 - Juan Aguilar Guisado
显示剩余2条评论

214

我的解决方案:

SharedPreferences preferences = getSharedPreferences("Mypref", 0);
preferences.edit().remove("text").commit();

2
这只是移除变量TEXT吗? - Si8
3
是的,这将仅删除具有键“text”的键值对。 - Dennis
我能够让它工作是因为已经有一段时间了,但还是谢谢您的回复 :) - Si8
你救了我的绝对理智。:P 谢谢。我试图一次清除对象中一个元素的偏好设置,这个方法运行得非常好。 - Azurespot
5
考虑使用 apply() 而不是 commit() 在后台线程中执行任务。 - Zon

155

移除所有偏好设置:

SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().clear().commit();

删除单个偏好设置:

SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().remove("KeyName").commit();

1
KeyName 会是什么? - hasnain_ahmad
4
如何删除整个偏好设置文件,而不仅仅是文件内的偏好设置? - Srikar Reddy
1
使用apply()代替commit()在后台线程中执行任务。commit()会阻塞并立即将数据写入存储。而apply()是异步的。 - Vaibhav

77

如果不必每次删除,您可以手动从以下位置删除:

设置 -> 应用程序 -> 管理应用程序 -> (选择您的应用程序) -> 清除数据或卸载

较新版本的Android:

设置 -> 应用程序 -> (选择您的应用程序) -> 存储 -> 清除数据和清除缓存


6
我们能否通过编程实现这些事情? - amity
1
@amity 另一个答案以编程方式实现了它。 - IAmGroot
42
感谢提供非程序化的选项。 - CorayThan
4
@amity - 我们中的有些人需要这个答案。我不确定如何在 Android 模拟器上删除 SharedPrefs,以便我可以继续测试我的代码。请帮我翻译这段话。 - TJ Biddle
1
Android Studio 2.2.2在2016年10月18日的版本中没有此功能。 - Robin like the bird
谢谢,我正好在寻找这种删除方法。 - Vlusion

28

一行代码删除Android Shared Preferences :-)

context.getSharedPreferences("YOUR_PREFS", 0).edit().clear().commit();

或者使用 apply 来进行非阻塞式异步操作:

this.getSharedPreferences("YOUR_PREFS", 0).edit().clear().apply();

对我来说,最好的解决方案。只有在共享首选项内容需要同步的情况下才需要同步。 - Juan Aguilar Guisado

25

似乎所有的解决方案都不完全有效或已经过期

清除 Activity 中的所有 SharedPreferences

PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().clear().apply();

在 onCreate 方法之后,从主 Activity 调用此方法。

注:我使用了 .apply(),而不是 .commit(),您可以自由选择 commit();


谢谢,它清除了所有默认偏好设置。 - Arpit Patel

17

从API 24(Nougat)开始,您只需执行以下操作:

context.deleteSharedPreferences("YOUR_PREFS");

然而,没有向后兼容性,所以如果您要支持低于24的任何内容,请坚持使用:

context.getSharedPreferences("YOUR_PREFS", Context.MODE_PRIVATE).edit().clear().apply(); 

15
在类定义中:
private static final String PREFERENCES = "shared_prefs";

private static final SharedPreferences sharedPreferences  = getApplicationContext().getSharedPreferences(PREFERENCES, MODE_PRIVATE);

类内部:

public static void deleteAllSharedPrefs(){
    sharedPreferences.edit().clear().commit();
}

11

即使您的手机没有 root 权限,也可以使用 adb shell 进行此操作。唯一的限制是应用程序必须支持调试模式。

run-as <your package name> <command>
例如:
run-as com.asdf.blah rm /data/data/com.asdf.blah/databases/myDB.db

或者,您可以直接按照上述步骤操作,但不使用该命令,这将使您直接进入应用程序包根目录,并允许您在应用程序的上下文中执行更多命令。


1
对于“run-as”有用的提示加1。你会认为我在3年后会发现这个... - Richard Le Mesurier
这不是Sharedpreferences,而是sqlite数据库。 - OneCricketeer

11
Editor editor = getSharedPreferences("clear_cache", Context.MODE_PRIVATE).edit();
editor.clear();
editor.commit();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接