共享首选项会丢失

时间:2012-11-29 18:45:03

标签: android sharedpreferences

我将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";
    }
}

3 个答案:

答案 0 :(得分:0)

您使用的是多个流程还是单个流程?

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

答案 1 :(得分:0)

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

example != null;

这使得它看起来已经消失但却没有。如果你这样称呼:

example.equals(null);

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

答案 2 :(得分:0)

我刚刚将editor.apply();更改为editor.commit();