Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Android应用程序中删除共享首选项数据_Android_Sharedpreferences - Fatal编程技术网

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

如何从Android应用程序中删除共享首选项数据,android,sharedpreferences,Android,Sharedpreferences,如何删除应用程序的SharedReferences数据 我正在创建一个使用大量web服务同步数据的应用程序。出于测试目的,我需要在重新启动应用程序时清除一些SharedReferences值。要删除特定值:后跟一个commit() 要将它们全部删除,请执行以下操作:SharedReferences.Editor.clear(),然后执行一个commit() 如果您不关心返回值,并且从应用程序的主线程中使用这个值,请考虑使用 Apple()/。 今天上午刚刚完成。从命令提示符: adb shell

如何删除应用程序的SharedReferences数据


我正在创建一个使用大量web服务同步数据的应用程序。出于测试目的,我需要在重新启动应用程序时清除一些SharedReferences值。

要删除特定值:后跟一个
commit()

要将它们全部删除,请执行以下操作:
SharedReferences.Editor.clear()
,然后执行一个
commit()


如果您不关心返回值,并且从应用程序的主线程中使用这个值,请考虑使用<代码> Apple()/<代码>。

今天上午刚刚完成。从命令提示符:

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

我的解决方案:

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

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

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

Android的更新版本:

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


即使没有根手机,也可以使用adb外壳来实现这一点。唯一的问题是应用程序必须是可调试的

run-as <your package name> <command>

或者,您可以只执行上述操作,但不使用命令,该命令将引导您到应用程序包根目录,并允许您在应用程序的上下文中执行更多命令。

删除所有首选项:

val prefs: SharedPreferences = getSharedPreferences("prefsName", Context.MODE_PRIVATE)
prefs.edit(commit = true) {
    clear()
}
SharedReferences设置=context.getSharedReferences(“PreferencesName”,context.MODE\u PRIVATE);
settings.edit().clear().commit();
删除单一首选项:

SharedReferences设置=context.getSharedReferences(“PreferencesName”,context.MODE\u PRIVATE);
settings.edit().remove(“KeyName”).commit();

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

您可以使用
首选项.edit().remove(“key”).commit()
从共享首选项中删除保存的值。

在一行中删除Android共享首选项:-)

或对非阻塞异步操作应用:

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

似乎所有的解决方案都不是完全有效的,也不是完全无效的

清除活动中的所有SharedReference

PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().clear().apply();
在onCreate之后从主活动调用此

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

请尝试以下代码:

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

要从任何类集中清除所有SharedReference,请执行以下操作:

public static SharedPreferences.Editor getEditor(Context context) {
    return getPreferences(context).edit();
}
然后从任何类:(commit返回一个布尔值,您可以在其中检查您的首选项是否已清除)

或者你可以使用apply;它返回无效

Navigation.getEditor(this).clear().apply();
全部清除:

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 deleteAllSharedPrefs(){
    sharedPreferences.edit().clear().commit();
}
从API 24(牛轧糖)开始,您只需执行以下操作:

context.deleteSharedPreferences("YOUR_PREFS");
但是,没有向后兼容性,因此如果您支持24小时以下的版本,请坚持:

context.getSharedPreferences("YOUR_PREFS", Context.MODE_PRIVATE).edit().clear().apply(); 
  • 要删除特定值
SharedReferences.Editor删除(字符串键)后跟提交()或应用()

  • 要删除所有值

    SharedReferences.Editor clear()后跟提交()或应用()


如果是为了您的测试。您可以使用adb命令

adb shell pm clear <package name>
adb外壳pm清除

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

getActivity().getSharedPreference().edit().remove("key").apply();
我还开发了一个库,可以方便地操纵共享偏好。您可以找到以下链接


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

因为我有许多共享首选项键,所以没有一个答案适合我

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

它对我有效,通过所有共享的\u prefs文件循环和删除

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

这将删除名为“someTag”的已保存共享首选项。

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

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

对于所有带有示例的共享首选项操作,您始终可以按照此处其他答案的建议以编程方式执行。但是出于开发目的,我发现这个
插件非常有用,因为它大大加快了我的开发速度

插件:ADB Idea

它为您提供了从Android Studio本身清除应用程序数据撤销权限的功能,只需单击一个按钮


kotlin中的一行代码:

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

context.getSharedReferences(“您的首选项”,0).edit().clear().commit()//删除所有的pref:)@yoshi肯定有一个remove()和clear()。使用remove()删除特定首选项,使用clear()删除所有首选项。原始问题不清楚他们是否需要全部删除。清除首选项文件似乎并不实际删除它。在我自己的测试中,通过观察“应用程序信息”面板中列出的“数据”使用情况,创建一个新的SharedReference文件会为该值增加4KB,但使用editor.clear().commit()不会减少该值。@rubdottocom为什么不将您的注释作为单独的答案?@rubdottocom最好使用.apply()而不是.commit()所以,无论是谁否决了这个解决方案,也许也应该解释一下原因:你需要一个根手机来直接访问
/data/data
!您需要从应用程序而不是ADB Shell中删除SharedReferences;被问及从未说过他们想要无根解决方案。不过这里有一个技术错误;因为此方法需要root,所以必须在
adb shell
之后运行
su
,才能打开一个特权shell。为什么会被否决这么多?这是一个有用的答案,也是我一直在寻找的答案
getActivity().getSharedPreference().edit().remove("key").apply();
new File(context.getFilesDir(), fileName).delete();
@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();
    }
}
String prefTag = "someTag";
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext);
prefs.edit().remove(prefTag).commit();
val prefs: SharedPreferences = getSharedPreferences("prefsName", Context.MODE_PRIVATE)
prefs.edit(commit = true) {
    clear()
}
getSharedPreferences("MY_PREFS_NAME", MODE_PRIVATE).edit().clear().apply()