You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:54:03