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