0

さまざまなタイプを拡張する多くの異なるクラスから、アプリ全体から共有設定オブジェクトにアクセスできる必要があります。

現在、アプリの開始アクティビティ内に静的変数を作成することでこれを行っています。

...
        public static SharedPreferences sharedpreferences;
        SharedPreferences.Editor editor;

        public void onCreate(Bundle savedInstanceState) {
            sharedpreferences = getSharedPreferences("PrefFile", MODE_PRIVATE); 
            editor = sharedpreferences.edit();
                ...
        }
...

そして、他のクラス内から次の方法でアクセスします。StartActivity.sharedpreferences

ほとんどの場合、これは正常に機能しますが、アプリがそのままバックグラウンドで実行され、ユーザーがアプリに戻って最後のアクティビティに戻り、開始アクティビティを再実行しない場合StartActivity.sharedpreferencesは、null になり、そのため、アクセスしようとすると NullPointerExecption が発生します。

Nullになることなく、複数のクラスが同じ共有設定変数にアクセスできるようにするにはどうすればよいですか

4

2 に答える 2

0

最初の get メソッドで初期化されるシングルトン インスタンスを作成します。

private static class SingletonHolder {
    private static SharedPreferences INSTANCE = getSharedPreferences("PrefFile", MODE_PRIVATE); 
}

public static SharedPreferences getSharedPreferences() {
    return SingletonHolder.INSTANCE;
} 
于 2013-06-15T18:32:57.910 に答える
0

次のようなシングルトン クラスを作成します。

    public class AppPreferences {
        private SharedPreferences sPreferences;
        public static void init(Context context) {
            sPreferences = context.getSharedPreferences(PREFERENCES_NAME, 0);
        }

        public static SharedPreferences getPrefs() {
            return sPreferences;
        }
    }

次に、カスタム Application サブクラスを作成します。

    public class App extends Application {

        @Override
        public void onCreate() {
            super.onCreate();
            AppPreferences.init(this);
        }
    }

AndroidManifest.xml に追加します。

    <application
        android:name="com.example.App"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
    ...
于 2013-06-15T18:37:14.717 に答える