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

590

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

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

29个回答

3

Kotlin中的一行代码:

getSharedPreferences("MY_PREFS_NAME", MODE_PRIVATE).edit().clear().apply()

3

Kotlin ktx清除所有首选项的方法:

val prefs: SharedPreferences = getSharedPreferences("prefsName", Context.MODE_PRIVATE)
prefs.edit(commit = true) {
    clear()
}

点击这里查看带有示例的所有Shared preferences操作


2

由于我有许多共享首选项键,因此没有一个答案适用于我。

假设您正在运行Android测试而不是单元测试。

对我来说,循环并删除所有shared_prefs文件是有效的。

@BeforeClass将在所有测试和ActivityTestRule之前运行

“Original Answer”翻译成中文为“最初的回答”。

@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();

我可以使用它来删除共享首选项中的文件


所有上述解决方案都是错误的,只有删除文件才是正确的方法来删除共享首选项。 - Dreamer

0

我的答案:

在Java中:

SharedPreferences myPrefs = context.getSharedPreferences("My_Pref", Context.MODE_PRIVATE);
myPrefs.edit().remove("my_key").apply();

使用Kotlin:

val myPrefs = context.getSharedPreferences("My_Pref", Context.MODE_PRIVATE)
myPrefs.edit().remove("my_key").apply()

0

Kotlin :

  var prefs2: SharedPreferences? = context!!.getSharedPreferences("loginFB", 0)
  prefs2!!.edit().remove("email").commit()

-1
这是我的Kotlin方法:
      public fun clearAllSharedPrefs() {
            val sharedPreferences: SharedPreferences = MainApplication.applicationContext()
                .getSharedPreferences("MY_CUSTOME_KEY", Context.MODE_PRIVATE)
            sharedPreferences.edit().clear()
            sharedPreferences.edit().apply()
        }

-2

您可以使用 preferences.edit().remove("key").commit() 从共享偏好中删除保存的值。


-5

今天早上刚刚做了这个。 从命令提示符:

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

注意:这需要一个已root的设备,如原生Android虚拟设备、Genymotion设备或实际已root的手机/平板电脑等。


11
谁曾经对这个解决方案进行了反对,或许应该解释一下原因:你需要一个已经 root 的手机才能直接访问“/data/data”目录! - nuala
4
你需要在不使用ADB Shell的情况下,从应用程序中移除SharedPreferences。可以使用以下代码:SharedPreferences.edit().clear().commit();注意不要更改原意,同时确保翻译易懂。 - ThePunisher
1
被询问者从未表示他们想要一个无需 root 的解决方案。但这里存在一个技术错误;因为这种方法需要 root 权限,所以你必须在 adb shell 后运行 su 命令来打开特权 shell。 - Anubian Noob
为什么这个回答被踩得这么多?这是一个有用的答案,也是我在寻找的答案。 - Matt

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