使用SharedReferences进行Android初始化

使用SharedReferences进行Android初始化,android,initialization,sharedpreferences,Android,Initialization,Sharedpreferences,我对SharedReferences和初始化有问题 我的应用程序有一个登录名,您可以在其中插入一个用户,对于该用户,您有一个特定的首选项。。。因此,我需要根据用户保存首选项,以便稍后加载 我认为SharedReferences将是解决方案,我认为确实如此,但我在初始化它们时遇到了一个问题:我有一个名为Options的活动类。它具有返回选项值的静态函数。。。但我有一个问题,我在创建该活动(意图)之前调用了该函数,因此我认为这些函数正在返回最后一个用户在选项上选择的最后一个值 如何在调用之前加载选项

我对SharedReferences和初始化有问题

我的应用程序有一个登录名,您可以在其中插入一个用户,对于该用户,您有一个特定的首选项。。。因此,我需要根据用户保存首选项,以便稍后加载

我认为SharedReferences将是解决方案,我认为确实如此,但我在初始化它们时遇到了一个问题:我有一个名为Options的活动类。它具有返回选项值的静态函数。。。但我有一个问题,我在创建该活动(意图)之前调用了该函数,因此我认为这些函数正在返回最后一个用户在选项上选择的最后一个值

如何在调用之前加载选项

我想首先使用一个意图,向用户发送额外的数据,并在选项的onCreate()中初始化它们,但是如果我创建了一个意图,那么选项就会出现(xml将加载)


有什么帮助吗?

所有
共享参考
需要的都是
上下文
,可以初始化。由于应用程序总是首先打开一个
活动
,因此您总是有一个
上下文
可供使用


我建议您将
SharedReferences
封装在
Singleton
类中,并在
getInstance
方法中将
context
作为参数传递。您应该能够通过这种方式在所有活动中访问您的共享首选项。

试试这样的方法。。。。为要保存的每个变量添加方法

 public class PreferenceManager {

    private static PreferenceManager self;
    private SharedPreferences preferences = null;
    private SharedPreferences.Editor editor = null;
    private boolean isInitialised = false;
    private static final String MY_PREFERENCE = "mypreferencekey";
    private String myPreference = null;

    public void initialise(Context context) {
    if (!isInitialised) {
        preferences = context.getSharedPreferences("MyPreferencePlace", Context.MODE_PRIVATE);
        editor = preferences.edit();
        loadPreferences();
        isInitialised = true;
    }
    }

    public static PreferenceManager getInstance() {
    if (self == null) {
        self = new PreferenceManager();
    }
    return self;
    }

    private PreferenceManager() {
    }

    public void setPreference(String newPreferenceValue) {
    this.myPreference = newPreferenceValue;
    savePreferences();
    }

    public String getPreference(){
    return myPreference;
    }

    private void savePreferences() {
    editor.putString(MY_PREFERENCE, myPreference);
    editor.commit();
    }

    private void loadPreferences() {
    myPreference = preferences.getString(MY_PREFERENCE, null);
    }

}

我在为android开发依赖项注入器,共享首选项的内容已经可以注入到带注释的字段中(请参阅:,PreferenceInjector)。欢迎使用补丁和改进。很快就会保存首选项

您不应该在活动上使用静态方法。非常糟糕的做法。最好是让一个singlton保存您的首选项,您可以在启动程序活动中初始化它,我会在稍后发布代码。。。。