24

SharedPreferences を使用して設定を保存しようとしています。しかし、アクティビティ間でデータを共有できないようです。私が使用しているコードは設定を保存できますが、各アクティビティには各変数の独自のバージョンがあるようです。

たとえば。ユーザーが保存される変数「musicVolume」に値を与えることができるオーディオ設定アクティビティがあります。ゲームを閉じてリロードすると、オーディオ設定アクティビティが値を「記憶」します。しかし、値を他のアクティビティにロードしようとすると、機能しません。ただし、それらはすべて、同じ名前の独自の変数をロードおよび保存できます。

これらは、変数を保存するために使用している方法です。各アクティビティには、これらの各メソッドのコピーがあります。**

私が言うように、それらは機能しますが、それらが配置されている個々のアクティビティのデータを読み書きすることしかできないようです。

public void SavePreferences(String key, float value) {
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putFloat(key, value);
        editor.commit();
}

public void LoadPreferences() {
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        musicVolume = sharedPreferences.getFloat("musicVolume", (float)0.123);
        soundEffectsVolume = sharedPreferences
                        .getFloat("soundEffectsVolume", (float)0.123);
}

public void ClearPreferences() {
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.clear();
        editor.commit();
}

** これを行うためのより良い方法があることは知っていますが、私は非常に初心者の oo プログラマーです。私は別のスレッドのアドバイスに従おうとしました

Android 共有設定

しかし、どこに行を入れようとしても

protected AppPreferences appPrefs;
appPrefs = new AppPreferences(getApplicationContext());

何らかのエラーが発生します。しかし、最も重要なことは、スレッドの他のコメントを読んで、とにかく同じパッケージ内のアクティビティ間で SharedPreferences が自動的に共有されると人々が言っ​​ていることです。

4

5 に答える 5

45

getPreferences(MODE)を使用しています。代わりにgetSharedPreferences("PREF_NAME", MODE)を使用してください。このようにして、特定の設定に名前を付けて、必要なアクティビティからその名前 (ここでは PREF_NAME) で呼び出すことができます。

//------get sharedPreferences

SharedPreferences pref = context.getSharedPreferences("PREF_NAME", Context.MODE_PRIVATE);

//-------get a value from them

pref.getString("NAME", "Android");

//--------modify the value

pref.edit().putString("NAME", "Simone").commit();

//--------reset preferences

pref.edit().clear().commit();
于 2012-07-31T19:47:47.130 に答える
12

言われたように、ではgetSharedPreferences(String name, int mode)なく使用してgetPreferences (int mode)ください。具体的には、興味がある場合は、これら 2 つの方法のドキュメントで違いが説明されています。Androidのドキュメント によるとgetPreferences(int)、次のことを行います:

このアクティビティ専用の設定にアクセスするための SharedPreferences オブジェクトを取得します。これは、このアクティビティのクラス名を設定名として渡すことによって、基礎となる getSharedPreferences(String, int) メソッドを呼び出すだけです。

于 2012-07-31T20:51:26.047 に答える
8

設定で特別なことをしていない場合は、デフォルトのアクセス方法を使用します。それはあなたの問題のようです。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

これは、より詳細な素晴らしい書き込みです。ハンドルを取得することを除いて、すべてをほぼ正しく行っていると言えます。 AndroidのPreferenceActivityからSharedPreferencesを取得するにはどうすればよいですか?

また、.commit() の代わりに .apply() を呼び出すという新しい方法を忘れないでください。これは #io2012 ビデオの 1 つにありました..

于 2012-07-31T19:51:27.683 に答える
2

これを使うべきです

SharedPreferences pref = context.getSharedPreferences("PREF_NAME", Context.MODE_PRIVATE);

または

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
于 2013-09-27T08:52:00.103 に答える
1

あなたが私と同じ問題を抱えていた場合、それは非常に簡単です。設定を保存するときは、次のように保存します。

SharedPreferences sp = getSharedPrefenreces("Preference",MODE_PRIVATE);

そしてそうではありません:

 SharedPreferences sp = getSharedPrefenreces("Preference's name",Context.MODE_PRIVATE);

場合によっては、SharedPrefenrence がどれほど重要であるかを知っています。

于 2015-11-26T02:19:41.730 に答える