0

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

我保存到共享首选项的方式有问题吗?

有没有人知道是什么导致了这个问题,它只发生了两次,比如 2 周之类的......所以我可以测试它,看看我是否解决了这个问题?

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";
    }
}
4

3 回答 3

0

您是使用多个进程还是单个进程?

您使用的是什么 API 级别?我知道在 API 级别 11 中,Google 更改了默认标志,因此 MODE_MULTI_PROCESS 不再是默认标志。只是一个想法。

于 2012-11-29T20:14:25.330 回答
0

在您的情况下,这可能不是答案,但我遇到了类似的问题。它“消失”的原因是由于某种原因String example = "notnull"无法使用以下方法进行比较:

example != null;

这使它看起来像是消失了,但实际上并没有。如果您改为调用它:

example.equals(null);

它将能够识别它。我知道这与第一个相反,但你弄清楚了。在您的情况下,这可能不是答案,但您应该尝试一下。

于 2012-11-30T20:18:15.670 回答
0

editor.apply();我刚改成editor.commit();

于 2012-11-30T21:16:08.610 回答