2011-10-21 52 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)。修補程序和改進是受歡迎的。偏好保存即將到來