Android 共享首选项丢失
我正在将2个字符串保存到共享首选项中,有时,由于某些原因,它们会被删除。。 我知道stackoverflow上还有几个其他问题,但没有一个能帮到我 我保存到共享首选项的方式是否有问题 有人知道是什么原因导致了这个问题吗?在两周的时间里,这个问题只发生了两次。。。所以我可以测试一下,看看我是否解决了这个问题Android 共享首选项丢失,android,sharedpreferences,Android,Sharedpreferences,我正在将2个字符串保存到共享首选项中,有时,由于某些原因,它们会被删除。。 我知道stackoverflow上还有几个其他问题,但没有一个能帮到我 我保存到共享首选项的方式是否有问题 有人知道是什么原因导致了这个问题吗?在两周的时间里,这个问题只发生了两次。。。所以我可以测试一下,看看我是否解决了这个问题 static void saveTitlePref(Context context, int mAppWidgetId, String text) { SharedPreference
static void saveTitlePref(Context context, int mAppWidgetId, String text) {
SharedPreferences.Editor editor = context.getSharedPreferences(PREFS_NAME, 0).edit();
editor.putString(PREF_PREFIX_KEY + mAppWidgetId, text);
editor.apply();
}
static void saveSizePref(Context context, int mAppWidgetId, String size) {
SharedPreferences.Editor editor = context.getSharedPreferences(PREFS_NAME, 0).edit();
editor.putString(PREF_SIZE_PREFIX_KEY, size);
editor.apply();
}
我这样加载它们:
static String loadTitlePref(Context context, int mAppWidgetId) {
SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
String prefix = prefs.getString(PREF_PREFIX_KEY + mAppWidgetId, null);
// If there is no preference saved, get the default from a resource
if (prefix != null) {
return prefix;
} else {
return context.getString(R.string.appwidget_prefix_default);
}
}
static String loadSizePref(Context context, int mAppWidgetId) {
SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
String sizeprefix = prefs.getString(PREF_SIZE_PREFIX_KEY, null);
// If there is no preference saved, get the default from a resource
if (sizeprefix != null) {
return sizeprefix;
} else {
return "24";
}
}
您使用的是多个流程还是单个流程
您使用的API级别是什么?我知道在API级别11中,Google更改了默认标志,使得MODE_MULTI_进程不再是默认的。只是想一想。你的情况可能不适合穿安全套,但我也有类似的问题。它“不显示”的原因是由于某些原因,
String example=“notnull”
无法使用以下方法进行比较:
example != null;
这使它看起来像是已经消失了,但它还没有消失。如果您将其称为:
example.equals(null);
它将能够识别它。我知道这和第一个正好相反,但你会明白的。对于您的情况,这可能不是答案,但您应该尝试一下。我刚刚更改了
editor.apply()代码>到编辑器.commit()代码>使用editor.commit()代码>而不是editor.apply()代码>看起来不错,你是如何读取这些值的?@MMohsinNaeem hu。我觉得差不多,但我会试试,看看是否有效,谢谢。@Jakob如果(sizeprefix!=null)
检查是多余的,请使用String sizeprefix=prefs.getString(PREF_SIZE_PREFIX_KEY,“24”)代码>哦!现在我想,说commit()而不是apply()可能会解决这个问题,因为我查看了我的应用程序的早期版本,我认为它没有这个bug,在那个版本中,我使用commit(),不记得为什么要更改它。我的min API是12。对不起,我是初学者,你说的过程是什么?好吧,那可能不是问题所在。您可以运行多个进程,但这并不典型——您必须在AndroidManifest.xml文件中显式设置,现在prefs甚至没有被加载。。可以肯定的是,你的意思是我应该替换:如果(前缀!= null){:(如果(前缀。等于(null)){是的,有问题的话。我注意到你使用了你的代码中的第一个。然后我不能帮助你。你可以考虑在这个问题上设置一个赏金。