4

ウィジェットから起動されたアクティビティから共有設定に値を保存しています。同じウィジェットから開始されたサービスからその値を取得すると、更新されたものではありません。共有設定にあった以前の値を取得しています。共有設定 xml でその値を確認しても、そこに更新された値が表示されます。なぜこれが起こっているのか。ウィジェットとアクティビティが 2 つのプロセスであることは知っていますが、それが理由ですか?

SharedPreferences preferences = getSharedPreferences("preferences_target_value", Context.MODE_PRIVATE);

String targetValue = preferences.getString("preferences_target_value", "0");

System.out.println("targetValue "+targetValue);`
4

3 に答える 3

5

これらの値はプロセスごとにキャッシュされます。

Android > 2.3 で実行している場合は、MODE_MULTI_PROCESSいつ呼び出すかを指定する必要がありますgetSharedPreferences ()。Android < 2.3 で実行している場合は、正しく動作するはずです。Android 2.3 で実行している場合、共有設定にバグがあり、何をしても複数のプロセスで正しく動作しません。

于 2012-08-27T07:53:01.257 に答える
1

値を更新した後に使用commit()し、これを呼び出してエディターで実行した変更を行います

prefsEditor.commit();

これの代わりにコードを変更してください

SharedPreferences preferences = getSharedPreferences("preferences_target_value", Context.MODE_PRIVATE);

これに

SharedPreferences preferences = getSharedPreferences("preferance name", Context.MODE_PRIVATE);
于 2012-08-27T05:42:21.930 に答える