2011-10-21 121 views
1

SharedPrefences和初始化存在问题。使用SharedPreferences进行Android初始化

我的应用程序有一个登录插入用户的地方,对于那个用户,你有一个特定的首选项......所以,我需要根据用户保存首选项以稍后加载它。

虽然那SharedPrefences将是解决方案,它真的是我认为,但我有一个问题来初始化他们:我有一个活动类称为选项。它有静态函数返回选项的值...但我有一个问题,我在创建该活动(意图)之前调用该函数,所以我认为这些函数返回最后一个用户的最后一个值在选项上选择...

如何在调用之前加载选项?

我虽然首先使用一个Intent向用户发送额外的数据,并在Options的onCreate()中初始化它们,但是如果我做了一个intent,那么Options就会出现(xml会加载)。

任何帮助吗?

+0

您不应该有活动的静态方法。非常不好的做法。最好有一个单身汉持有你的偏好,你初始化你的发射器活动,我会在一秒后发布代码.... – SnowyTracks

回答

2

尝试类似这样的....为每个想要保存的变量添加方法。

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); 
    } 

} 
0

所有的SharedPreferences需要是一个context它可以被初始化。由于您的应用程序始终会打开一个Activity开始,您始终有一个context来处理。

我建议你将SharedPreferences包装在Singleton类中,只是在getInstance方法中通过context作为参数。您应该能够以这种方式访问​​所有活动的共享首选项。

0

我的依赖注入的Android和共享偏好的内容合作已经喷射到注释字段(见:https://github.com/ko5tik/andject,PreferenceInjector)。修补程序和改进是受欢迎的。偏好保存即将到来