删除SharedPreference.xml文件不生效

本文通过解决一个实际问题,探讨了在Android开发中清除SharedPreferences缓存时遇到的问题。文章指出,直接删除shared_prefs目录下的XML文件可能不会立即生效,并分享了一种有效的方法——使用clear()方法来彻底清除缓存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因:最近做一个清除缓存的功能,因为需要删除SharedPreference文件,所以直接copy了一份代码:

//删除生成的xml文件
deleteFilesByDirectory(new File("/data/data/"
                + context.getPackageName() + "/shared_prefs"));

看是没什么问题,但是实际发现并没有起作用(应用中的设置界面读取的还是原来的值)。于是进行一波调试。。。
最后,发现调用clear()方法可以达到效果,具体原因:Android中的SharedPreferences陷阱

在使用SharedPreferences.Editor的putStringSet方法时,顺序被打乱是一个常见的问题,因为SharedPreferences本身并不保证集合中元素的顺序。如果需要保持顺序,可以考虑以下几种方法: 1. **使用JSON字符串**:将集合转换为JSON字符串并存储为一个字符串,然后在读取时再将其转换回集合。 ```java // 存储 JSONArray jsonArray = new JSONArray(yourList); editor.putString("key", jsonArray.toString()); editor.apply(); // 读取 String jsonString = sharedPreferences.getString("key", null); List<String> yourList = new ArrayList<>(); if (jsonString != null) { JSONArray jsonArray = new JSONArray(jsonString); for (int i = 0; i < jsonArray.length(); i++) { yourList.add(jsonArray.getString(i)); } } ``` 2. **使用逗号分隔的字符串**:将集合转换为一个以逗号分隔的字符串,然后存储该字符串。 ```java // 存储 StringBuilder sb = new StringBuilder(); for (String s : yourList) { sb.append(s).append(","); } editor.putString("key", sb.toString()); editor.apply(); // 读取 String storedString = sharedPreferences.getString("key", ""); List<String> yourList = new ArrayList<>(); if (!storedString.isEmpty()) { String[] items = storedString.split(","); yourList = Arrays.asList(items); } ``` 3. **使用第三方库**:使用像Realm或Room这样的数据库库,这些库可以更好地处理数据的有序存储。 4. **自定义存储格式**:如果集合中的元素有特定的顺序,可以考虑使用自定义的存储格式,例如将每个元素与一个索引关联起来。 通过这些方法,可以有效地保持集合中元素的顺序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值