web-dev-qa-db-ja.com

sharedPreferencesはアクティビティ間で共有されません

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はとにかく同じパッケージ内のアクティビティ間で自動的に共有されると人々が言っ​​ていることです。

19
user922220

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();
38
Niraj Burde

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

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

12
Matt Shaw

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

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

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

また:新しい方法は、.commit()ではなく.apply()を呼び出すことです。これは#io2012ビデオの1つでした。

7
Frank Sposaro

これを使用する必要があります

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

または

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
2
Singhak

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

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

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

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

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

0
Yuri Cavalcante