我经历过一种对我没有任何意义的奇怪行为。
通过这样做,我设法在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”)不是吗?
答案 0 :(得分:1)
根据docs,你需要调用commit来进行更改:
editor.remove("temperature").commit();
答案 1 :(得分:0)
已解决
您可以尝试将此代码用于 删除 单个首选项:
Prefs.remove("my_custom_key");
别忘了导入库:
import com.pixplicity.easyprefs.library.Prefs;
这段代码很适合我。