editor.remove()在共享偏好中没有删除密钥

时间:2018-03-05 14:28:39

标签: android sharedpreferences

我经历过一种对我没有任何意义的奇怪行为。

通过这样做,我设法在Java类中保存了一个不是活动的共享偏好中的温度值:

方法getContextOfApplication()是我在Java.Class中使用的方法,我将温度值放在String中,并将其作为“温度”存储在sharedpreferences中。

此方法在我的MainActivity中声明如下:

public static Context contextOfApplication;


public static Context getContextOfApplication() {
    return contextOfApplication;
}

此方法getContextOfApplication();在Mainactivity和我的Java.Class

中用于所有具有共享偏好的assosiacions
        tempParsed = Jobject.get(("temp")) + "";

        SharedPreferences tempSettings = getSharedPreferences(getContextOfApplication());
        SharedPreferences.Editor tempEdit = tempSettings.edit();
        tempEdit.putString("temperature",  tempParsed);
        tempEdit.apply();

后来我在MainActivity中接收了关键“温度”的这个值,如下所示:

     SharedPreferences fetchSettings = 
     PreferenceManager.getDefaultSharedPreferences(getContextOfApplication());

     String Temp = fetchSettings.getString("temperature", "");

我可以使用存储的温度与弦温。

到目前为止一切顺利。

稍后在我的代码中,我想删除此字符串,该字符串保存在sharedpreferences中,密钥为“temperature”。

我很容易想到......

首先,当我想删除值/值

时,我调用了此代码
SharedPreferences fetchSettings = 
PreferenceManager.getDefaultSharedPreferences(getContextOfApplication());

SharedPreferences.Editor editor = fetchSettings.edit();
    editor.clear();
    editor.apply();

但是这段代码删除了所有存储的信息,所以我很想不到。

这就是为什么我试图改变这一行:

    editor.clear();
    editor.apply();

对此:

    editor.remove("temperature")
    editor.apply();

但这不起作用!!

现在您可能想知道“您确定这是您的密钥的名称吗?”

我添加了此代码以读取存储在defaultsharedpreferences中的所有条目:

 Map<String, ?> allEntries = fetchSettings.getAll();
    for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
        Log.d("mapvalues ", entry.getKey() + ": " + entry.getValue().toString());
    }

和日志显示“温度:”作为关键......

为什么是editor.clear();但是编辑.remove(“key”)不是吗?

2 个答案:

答案 0 :(得分:1)

根据docs,你需要调用commit来进行更改:

editor.remove("temperature").commit();

答案 1 :(得分:0)

已解决
您可以尝试将此代码用于 删除 单个首选项:

Prefs.remove("my_custom_key");  

别忘了导入库:

import com.pixplicity.easyprefs.library.Prefs;  

这段代码很适合我。