1

!! 助けてください。これが原因でユーザーのデータが失われています。どうすればよいかわかりません。

これは Ice Cream Sandwich でのみ発生し、Jelly Bean、Hoenycomb では問題なく動作します。何が原因ですか?

私の文字列の 1 つは単なる数値なので、float または int として保存したほうがよいでしょうか??

奇妙なことに、Android 4.0.3 を搭載した acer a500 タブレットでは正常に動作しますが、4.0.3 のエミュレーターでは動作しません。4.0 で Galaxy s3 を使用しているユーザーから苦情がありました。 4、彼もうまくいかなかった..

次のように、共有設定に 2 つの文字列を保存しています。

ありがとう

    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>
4

2 に答える 2

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);

したがって、これを新しく呼び出すたびに、他のウィジェットに対してオーバーライドされます。

于 2012-12-02T11:28:15.263 に答える
0

まず第一に、エミュレーターで起こっていることを信じてはいけません。

あなたのコードは問題ないようです。

他のデバイスで同じ問題を確認し、正常に機能するかどうかを確認する必要があると思います。ユーザーの 1 人が経験した他の問題があり、最終的には設定がうまく機能していないと推測される可能性があるためです。

私自身、使用しているのと同じデバイスでテストしたにもかかわらず、アプリが機能しないとユーザーが言うケースをいくつか経験しました。

于 2012-12-02T11:32:56.957 に答える