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

像这样创建单例类:

    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 回答
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 回答