清除具有动态键的共享首选项

Clear shared preference having dynamic keys

我正在我的应用程序中创建一个 SharedPreferences,使用一个动态密钥,该密钥是使用一些固定字符串和 ID(每个项目的唯一 ID)的组合生成的。

从共享偏好中获取值

public static int getSharedPref(Context context, String keyName) {
    SharedPreferences betaPref = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
    return betaPref.getInt("getShare" + keyName, 0);
}

在共享首选项中保存值

public static void saveSharedPref(Context context, int value, String keyName) {
    try {
        SharedPreferences betaPref = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = betaPref.edit();
        editor.putInt("getShare" + keyName, value);
        editor.apply();
    } catch (Exception e) {
        LogUtil.e("getShare" + keyName, Log.getStackTraceString(e), e);
    }
}

到目前为止效果很好,但现在我还想在用户从应用程序注销时删除这些共享偏好设置。
我知道我们可以使用

preferences.edit().remove("getShare").commit();

删除特定的共享首选项,但作为动态键,我没有删除它的确切名称。

查询:有什么方法可以删除所有包含特定关键字的共享首选项?或者获取共享首选项中使用的所有关键字并过滤它们以删除特定关键字

正在删除所有首选项:

SharedPreferences sharedPreferences  = context.getSharedPreferences("name", Context.MODE_PRIVATE);
sharedPreferences.edit().clear().commit();

删除单个首选项:

SharedPreferences sharedPreferences = context.getSharedPreferences("name", Context.MODE_PRIVATE);
sharedPreferences.edit().remove("key_name").commit();

SharedPreferences 的方法 getAll() 即 returns 一个 Map<String, ?> 。从地图中,您可以使用 keySet() 轻松检索键,使用 entrySet():

检索 key/value 映射
Map<String, ?> allEntries = prefA.getAll();
for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
    Log.d("map values", entry.getKey() + ": " + entry.getValue().toString());
}