共享首选项在ICS重启时丢失

时间:2012-11-30 21:19:51

标签: android sharedpreferences android-4.0-ice-cream-sandwich

!!请帮助,我的用户因此丢失数据,我不知道该怎么做。

这只发生在冰淇淋三明治上,在Jelly Bean,Hoenycomb上工作正常,是什么原因造成的?

由于我的一个字符串只是一个数字,将它保存为float或int会更好吗?

奇怪的是,它在我的acer a500平板电脑上工作得很好,有了android 4.0.3,但它在4.0.3的模拟器上不起作用,我收到了一个用Galaxy s3的用户投诉在4.0.4,对他来说也不起作用..

我将两个字符串保存到共享首选项中,如下所示:

由于

    private static final String PREFS_NAME = "com.MY_PACKAGE.MY_APP.MY_WIDGET_PROVIDER_CLASS";
    private static final String PREF_PREFIX_KEY = "prefix_"; 
    private static final String PREF_SIZE_PREFIX_KEY = "prefix_";

...

  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.commit();
    }

   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.commit();
    }


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

字符串xml

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">

    <string name="appwidget_prefix_default"></string>
    <string name="appwidget_text_format"><xliff:g id="prefix">%1$s</xliff:g></string> 
    <string name="appwidget_size_format"><xliff:g id="sizeprefix">%s</xliff:g></string>


</resources>

2 个答案:

答案 0 :(得分:0)

您的尺寸偏好不是唯一的每个小部件这是故意吗?

你在做什么

editor.putString(PREF_SIZE_PREFIX_KEY, size);

而不是

editor.putString(PREF_SIZE_PREFIX_KEY + appWidgetId, size);

与检索相同:

 String sizeprefix = prefs.getString(PREF_SIZE_PREFIX_KEY, null);

因此,对此的每次新调用都会覆盖其他小部件。

答案 1 :(得分:0)

首先,你不应该相信模拟器上发生的事情,因为它有时很奇怪。

您的代码似乎没问题。

我会说你应该检查其他设备上的相同问题并检查一切是否正常,因为很可能你的一个用户遇到了一些其他问题,这最终推断出事情没有正常工作有偏好

我自己经历过一些情况,用户说应用程序对他们不起作用,即使我在他们使用的同一设备上测试过它。