我在这里找到了所有答案并尝试了所有解决方案,但我的共享首选项仍然没有持久性。
这是我的代码:
public static void setActivated(boolean activated) {
SharedPreferences sp = Utils.getContext().getSharedPreferences(
USER_PREFS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putBoolean(ASD, activated);
editor.commit();
}
public static boolean isActivated() {
SharedPreferences sp = Utils.getContext().getSharedPreferences(USER_PREFS, Context.MODE_PRIVATE);
return sp.getBoolean(ASD, true);
}
我也试过了:
editor.clear();
editor.put ..
editor.commit();
我也试过
editor.apply();
我甚至尝试过使用.apply()和.commit()而没有运气。
另一个想法是尝试对文件使用不同的模式:
...getSharedPreferences(USER_PREFS, Context.MODE_MULTI_PROCESS);
问题是保存的值不是持久的。如果我关闭应用程序然后重新打开它,则值都是错误的。
有没有人有任何想法?我还要提到问题仅出现在某些设备上,例如HTC One S,三星Galaxy S3(我在不同的S3上测试过,它运行良好)。
编辑:我在按钮单击侦听器上调用save,并在加载片段时调用isActivated(在onViewCreated()之后)。
谢谢!
答案 0 :(得分:3)
public abstract SharedPreferences.Editor clear()
在API级别1中添加在编辑器中标记以从中删除所有值 喜好。一旦调用commit,就会剩下唯一的首选项 将是您在此编辑器中定义的任何内容。请注意,当 回到首选项,先做清楚, 无论你是否在put方法之前或之后调用clear 这个编辑。
返回返回对同一Editor对象的引用,因此可以 链把电话放在一起。
在我的用户首选项类中,我在其他一些字符串上得到一个空值,我的代码是这样的:
SharedPreferences sp = Utils.getContext()
.getSharedPreferences(USER_PREFS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
if (session != null && !"".equals(session)) {
sessionId = session;
editor.putString(SESSION, sessionId).commit();
} else {
sessionId = null;
editor.clear().commit();
}
editor.clear()
正在重置我的所有其他提交!
答案 1 :(得分:1)
嗨,我认为它应该有效。如果清除不起作用,您可以尝试我的解决方案中详述的第二个选项:
您有两个选择:
在活动的生命周期内获取共享偏好值。
在.clear
.commit
醇>
见我的回答:
Android Persistent Checkable Menu in Custom Widget After Reboot Android
答案 2 :(得分:0)
我不知道为什么,但只是将你的prefs代码放在异步任务中就可以了:
prefss = getSharedPreferences(ACCOUNT_PREFS_NAME, MODE_MULTI_PROCESS);
new AsyncSave(favNamesList).execute();
private static class AsyncSave extends AsyncTask<Void, Void, Boolean> {
String favNamesList;
AsyncSave(String favNamesList) {
this.favNamesList = favNamesList;
}
@Override
protected Boolean doInBackground(Void... params) {
prefss.edit().putString("favNamesList", strings).apply();
return null;
}
}