从许多类访问共享首选项

时间:2013-06-15 18:28:27

标签: java android sharedpreferences

我需要能够通过我的应用程序从许多不同的类中访问共享首选项对象,这些类扩展了一系列类型。

目前,我一直是通过在应用的开始活动中创建静态变量来实现此目的的。

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

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

然后从其他课程中我通过:StartActivity.sharedpreferences

访问它

在大多数情况下,这样可以正常工作,但是如果应用程序已经离开并且仍然在后台运行,并且用户返回到应用程序以便它返回到上一个活动并且不会重新运行启动活动,{ {1}}现在为null,因此如果我尝试访问它,则会引发NullPointerExecption。

如何让多个类访问相同的共享首选项变量而不会变为Null

2 个答案:

答案 0 :(得分:0)

创建一个将在第一个get方法初始化的单例实例。

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

public static SharedPreferences getSharedPreferences() {
    return SingletonHolder.INSTANCE;
} 

答案 1 :(得分: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" >
    ...