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プログラマーです。別のスレッドのアドバイスに従おうとしました
しかし、私が線を引こうとしたところはどこでも
protected AppPreferences appPrefs;
appPrefs = new AppPreferences(getApplicationContext());
なんらかのエラーが発生します。しかし、最も重要なことは、スレッドの他のコメントを読んで、SharedPreferencesはとにかく同じパッケージ内のアクティビティ間で自動的に共有されると人々が言っていることです。
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();
すでに述べたように、getSharedPreferences(String name, int mode)
ではなくgetPreferences (int mode)
を使用してください。具体的には、興味がある場合は、これら2つの方法のドキュメントに違いが示されています。 AndroidドキュメントgetPreferences(int)
によると、次のことを行います。
このアクティビティにプライベートな設定にアクセスするためのSharedPreferencesオブジェクトを取得します。これは、このアクティビティのクラス名を設定名として渡すことにより、基になるgetSharedPreferences(String、int)メソッドを呼び出すだけです。
設定で特別なことを何もしていない場合は、デフォルトのアクセス方法を使用します。それはあなたの問題のようです。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
これは、より詳細な記述です。ハンドルを取得することを除いて、すべてをほぼ正しく実行していると言えます。 AndroidのPreferenceActivityからSharedPreferencesを取得するにはどうすればよいですか?
また:新しい方法は、.commit()ではなく.apply()を呼び出すことです。これは#io2012ビデオの1つでした。
これを使用する必要があります
SharedPreferences pref = context.getSharedPreferences("PREF_NAME", Context.MODE_PRIVATE);
または
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
あなたが私と同じ問題を抱えているなら、それはとても簡単です。設定を保存するときは、次のように保存します。
SharedPreferences sp = getSharedPrefenreces("Preference",MODE_PRIVATE);
そしてそうではありません:
SharedPreferences sp = getSharedPrefenreces("Preference's name",Context.MODE_PRIVATE);
場合によっては、SharedPrefenrencesがどれほど重要かを知っています。