如何删除应用程序的共享流程数据?

我正在创建一个使用大量Web服务同步数据的应用程序。为了进行测试目的,我需要在重新启动应用程序时清除一些共享的电流值。

有帮助吗?

解决方案

删除特定值: sharedPreferences.editor.remove() 然后是 commit()

全部删除它们 SharedPreferences.Editor.clear() 然后是 commit()

如果您不在乎返回值,而是从应用程序的主线程中使用此信息,请考虑使用 apply() 反而。

其他提示

我的解决方案:

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

删除所有偏好:

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

如果不需要每次删除,您可以手动将其从:

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

Android的较新版本:

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

删除Android一行共享偏好:-)

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

或者 apply 用于非阻滞异步操作:

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

似乎所有解决方案都不是完全工作或超过死亡

清除活动中的所有共享重报

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

在发行之后从主要活动中调用这一点

注意*我用过

.apply()

代替

.commit()

您可以自由选择commit();

您可以使用ADB Shell执行此操作,即使没有扎根手机。唯一的收获是该应用程序必须进行辩论。

run-as <your package name> <command>

例如:

run-as com.asdf.blah rm /data/data/com.asdf.blah/databases/myDB.db

另外,您只需执行以上操作,但没有命令,该命令将您引导到App Package root,并允许您在应用程序上下文中执行更多命令。

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

清除它们:

PreferenceManager.getDefaultSharedPreferences(context).edit().clear().apply()

在课堂定义中

private static final String PREFERENCES = "shared_prefs";

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

班上

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

尝试此代码:

SharedPreferences sharedPreferences = getSharedPreferences("fake", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.clear().commit();

从API 24(Nougat)开始,您可以做:

context.deleteSharedPreferences("YOUR_PREFS");

但是,没有向后的兼容性,因此,如果您支持少于24的东西,请坚持:

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

您也可以使用设备手动卸载应用程序。然后,当您重新安装应用程序时,共享首选项已重置。

如果是用于测试。您可以使用ADB命令。

adb shell pm clear <package name>
  • 要删除特定值,

sharedPreferences.editor remove(字符串键) 然后是提交()或apply()

  • 要删除所有值,

    sharedPreferences.editor clear() 然后是提交()或apply()

String prefTag = "someTag";
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext);
prefs.edit().remove(prefTag).commit();

这将删除使用名称为“ woryag”的保存共享的首选项。

从任何班级中集中清除所有共享重新提示:

public static SharedPreferences.Editor getEditor(Context context) {
    return getPreferences(context).edit();
}

然后从任何类别中:(提交返回布尔值,您可以检查您的偏好是否清除)

        Navigation.getEditor(this).clear().commit();

或者:您可以使用apply:它返回void avarigation.geteditor(this).clear()。apply();

要从首选中删除钥匙值对,您可以轻松执行以下操作

getActivity().getSharedPreference().editor().remove("key").apply();

我还开发了库,以轻松操纵共享的偏好。您可能会找到以下链接

https://github.com/farruhha/simpleprefs

由于我有许多共享的偏好键,因此对我无济于事。

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

它对我循环工作并删除所有 shared_prefs 文件。

@beforeclass将在所有测试和ActivityTestrule之前运行

@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();
    }
}
new File(context.getFilesDir(), fileName).delete();

我可以在与之共享的首选项中删除文件

你可以 use-> preferences.edit().remove("key").commit(); 从共享的首选项中删除保存的值。

只是今天早上这样做。从命令提示符:

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设备或实际的扎根手机/平板电脑等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top