Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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 从SharedReferences中删除ArrayList_Android_Sharedpreferences - Fatal编程技术网

Android 从SharedReferences中删除ArrayList

Android 从SharedReferences中删除ArrayList,android,sharedpreferences,Android,Sharedpreferences,我知道有几个例子,但我尝试了很多,但我无法解决我的问题。我想从我的共享首选项中删除ArrayList 我在第一个活动中创建共享首选项的ArrayList: public void saveArrayList(ArrayList<String> list){ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor ed

我知道有几个例子,但我尝试了很多,但我无法解决我的问题。我想从我的共享首选项中删除ArrayList

我在第一个活动中创建共享首选项的ArrayList:

 public void saveArrayList(ArrayList<String> list){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = prefs.edit();
    Gson gson = new Gson();
    String json = gson.toJson(list);
    editor.putString("testShared", json);
    editor.apply();     // This line is IMPORTANT !!!
}
问题是

SharedReferences首选项GetSharedReferences(“testShared”,MODE_PRIVATE);
preferences.edit().clear().apply()

不起作用,因此当我再次打开“活动”时,列表又出现了。

getSharedReferences()
不会执行您认为它会执行的操作。传递给它的字符串是该组SharedReference的名称,存储在该实例中的任何内容都将保存在它自己的文件中

例如,使用

getSharedPreferences("hello", ...).edit().putString("test", "something").apply();
将在应用程序的数据目录(
preferences\u hello.xml
)中创建一个全新的文件,其中存储了
test/something
键/值

getSharedReferences()
没有获取特定的首选项,它获取一组特定的首选项
getDefaultSharedReferences()
实际上在内部调用
getSharedReferences()
,并传递应用程序的包名

您当前正在将
testShared
保存到默认的SharedReferences(
getDefaultSharedReferences()
)中。如果要清除该值,请使用

PreferenceManager.getDefaultSharedPreferences(context).edit().remove("testShared").apply();

清除PREF后,您可以执行以下操作:

SharedPreferences preferences = getSharedPreferences("testShared", MODE_PRIVATE);
这意味着您需要具有该名称的特定首选项集。您的其他首选项未命名,因此它们将是不同的集

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(AddFoodBasket.this);

使用完全相同的方法获取首选项,然后将要设置的键设置为null,或者如果要删除所有首选项,可以
clear()
删除它们

我认为它是有效的,但是当我返回到第一个活动并再次打开第二个活动时,我得到了这个错误
,原因是:java.lang.NullPointerException:尝试在空对象引用上调用接口方法“int java.util.List.size()”
。不管你的答案是否正确,我会解决另一个问题!Thanks@AlexKolydas很可能是因为您正在调用
getArrayList()
,它现在为空。
SharedPreferences preferences = getSharedPreferences("testShared", MODE_PRIVATE);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(AddFoodBasket.this);