Android 共享首选项丢失

Android 共享首选项丢失,android,sharedpreferences,Android,Sharedpreferences,我正在将2个字符串保存到共享首选项中,有时,由于某些原因,它们会被删除。。 我知道stackoverflow上还有几个其他问题,但没有一个能帮到我 我保存到共享首选项的方式是否有问题 有人知道是什么原因导致了这个问题吗?在两周的时间里,这个问题只发生了两次。。。所以我可以测试一下,看看我是否解决了这个问题 static void saveTitlePref(Context context, int mAppWidgetId, String text) { SharedPreference

我正在将2个字符串保存到共享首选项中,有时,由于某些原因,它们会被删除。。 我知道stackoverflow上还有几个其他问题,但没有一个能帮到我

我保存到共享首选项的方式是否有问题

有人知道是什么原因导致了这个问题吗?在两周的时间里,这个问题只发生了两次。。。所以我可以测试一下,看看我是否解决了这个问题

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)){是的,有问题的话。我注意到你使用了你的代码中的第一个。然后我不能帮助你。你可以考虑在这个问题上设置一个赏金。