如何删除SharedPreferences中带特定前缀的动态key对应存储数据
解决方案
你提到的第二种思路完全可行,SharedPreferences原生支持获取所有已存储的key,直接筛选前缀匹配的项批量删除即可,具体实现如下:
方法1:遍历筛选匹配前缀的key删除
直接调用SharedPreferences.getAll()获取所有存储的键值对,筛选出以你固定前缀getShare开头的key后批量删除:
public static void clearUserRelatedSp(Context context) { SharedPreferences betaPref = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = betaPref.edit(); // 遍历所有已存储的key for (String key : betaPref.getAll().keySet()) { // 匹配动态key的固定前缀 if (key.startsWith("getShare")) { editor.remove(key); } } // 退出登录场景需要确保删除完成再走后续逻辑可换成commit()同步提交 editor.apply(); }
方法2(优化方案,适合后续迭代)
如果这类getShare前缀的动态key存储的全是用户相关的数据,可直接将这部分数据单独存储在一个专属的SharedPreferences文件中,退出登录时直接清空整个文件即可,不需要遍历筛选,性能更好:
// 清空用户专属SP文件的所有数据 public static void clearUserSp(Context context) { SharedPreferences userPref = context.getSharedPreferences(USER_PREF_NAME, Context.MODE_PRIVATE); userPref.edit().clear().apply(); }
内容的提问来源于stack exchange,提问作者Nitish
相关产品推荐
相关产品推荐

