どのように私はSharedPreferencesを使用する目的のために特別にクラスを作成するのですか?

StackOverflow https://stackoverflow.com/questions/4024297

質問

私は、共有設定を利用したいというのが私のアプリでカップルの活動を持っています。当初、私は罰金を働いたSharedPreferencesを利用するために、各活動の方法を、作成しました。同じデータを使用して複数のアクティビティがあるのでしかし、私は基本的に複数の場所で同様の方法を挟み込みますよ。それはすべてのこれらのメソッドを処理する目的のために特別にクラスを作成するために、より多くの意味を成していたように思えたそれはとてもます。

残念ながら、私はそれを正しく行う方法を理解していません。

それが言うので、これは、コンパイルされません「getSharedPreferencesがタイプAppPrefsのために定義されていません。」

public class AppPrefs {
 public void foo() {
  SharedPreferences settings = getSharedPreferences("MyAppPrefs", 0);
 } 
}
最後に、私はSharedPreferencesは、私はこれを行うことができ、インターフェイスがあるかもしれないから、と思ったが、その後私は、継承されたメソッドを実装する必要があると思います。私はそれらのいずれかの方法をオーバーライドする理由がないので、どちらかこれを行う理由はありません。

public class AppPrefs implements SharedPreferences {
 public void foo() {
  SharedPreferences settings = getSharedPreferences("MyAppPrefs", 0);
 } 
}

何をここで行うことは理にかなって?私は行方不明コンセプト午前はありますか?誰もが精巧と説明してもらえますか?おかげます。

役に立ちましたか?

解決

あなたの好みのゲッターにあなたのコンテキストを渡します。

public class AppPrefs {
 public static void foo(Context ctx) {
  SharedPreferences settings = ctx.getSharedPreferences("MyAppPrefs", 0);
 } 
}
今だけthisに活動クラスからfoo()に渡す

他のヒント

設定がアプリケーションにグローバルである場合は、共通設定にアクセスする必要がある場合、あなたはPreferenceManager.getDefaultSharedPreferences();を使用することができます。好みはActivitiesのサブセットに固有である場合、あなたはいくつかの異なるオプションがあります:

はあなたの好みにアクセスするために必要なすべてのクラスによって拡張されActivityサブクラスを作ることができます

public abstract class AbstractFooActivity extends Activity
{
    protected SharedPreferences getFooPreferences()
    {
        return getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
    }

    private static final String PREFS_NAME = "FooPrefs";
}

public class AFooActivity extends AbstractFooActivity
{
    public void aMethodThatNeedsPrefs()
    {
        // ...
        SharedPreferences myPrefs = getFooPreferences();
    }
}

それとも、私のような、あなたは、単にその設定にアクセスする必要があるアクティビティのグループのための共通の一定の値を作成することができますクラス階層と混乱というではないと思います。これはあなたが必要が好みにアクセスすることActivity階層のクラスの外を持っているような状況で有用です。例えば、Serviceます。

public final class FooConstants
{
    public static final String FOO_PREFS_NAME = "FooPrefs";
}

public class AFooActivity extends Activity
{
    public void aMethodThatNeedsPrefs()
    {
        // ...
        SharedPreferences myPrefs = getSharedPreferences(FOO_PREFS_NAME, MODE_PRIVATE);
    }
}

public class AFooService extends Service
{
    public void aMethodThatNeedsPrefs()
    {
        // ...
        SharedPreferences myPrefs = getSharedPreferences(FOO_PREFS_NAME, MODE_PRIVATE);
    }
}

第2の方法は、わずかに少なく、カプセル化されていますが、私の意見では良いのトレードオフであるオブジェクト階層、上のプット制限が少ないます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top