2013-12-13 44 views
1

我寫了一個自定義DialogPreference,包含兩個NumberPickers。在"onDialogClose"我希望從每個值合併,然後存儲在SharedPreferences,使用「persistLong」。自定義首選項不在SharedPreferences中存儲值?

首選項工作正常,一切都按預期調用,但是當我嘗試從SharedPreferences檢索值時,似乎沒有任何內容使用我提供的密鑰進行存儲。

任何想法可能是錯誤的?

+3

發佈一些代碼。特別是閱讀和存儲數據 –

回答

2

您可能未提供正確的context,即您檢索SharedPreferences的地方可能使用與存儲新偏好的地點不同的上下文。

一個更容易的方法是在整個應用程序中使用一個單獨的PreferenceHelper類來檢索和存儲值。

package in.example; 

import android.content.Context; 
import android.content.SharedPreferences; 
import android.preference.PreferenceManager; 

public class PreferencesHelper { 
    private SharedPreferences prefs; 
    private SharedPreferences.Editor editor; 

    // Class constants. 

    public PreferencesHelper(Context context) { 
     prefs = PreferenceManager.getDefaultSharedPreferences(context); 
     editor = prefs.edit(); 
    } 

    public static PreferencesHelper getInstance(Context context) { 
     return new PreferencesHelper(context); 
    } 

    public Boolean getBoolean(String key) { 
     return prefs.getBoolean(key, false); 
    } 

    public void setBoolean(String key, Boolean value) { 
     editor.putBoolean(key, value); 
     editor.commit(); 
    } 

    public String getString(String key) { 
     return prefs.getString(key, ""); 
    } 

    public void setString(String key, String value) { 
     editor.putString(key, value); 
     editor.commit(); 
    } 

    public int getInt(String key) { 
     return prefs.getInt(key, 0); 
    } 

    public void setInt(String key, int value) { 
     editor.putInt(key, value); 
     editor.commit(); 
    } 

} 

現在,您可以通過調用PreferencesHelper.getInstance(context),然後簡單地調用它的方法來存儲和檢索值很容易得到這個類的一個實例。

注意。以上示例類返回一個空字符串,如果 給定的首選項鍵未設置或找到值,則爲 布爾值爲false,對於int值爲0。

+0

看起來好像兩個不同的上下文是問題!非常感謝你! – Cethy

+0

準確地說,getDefaultSharedPreferences在進程內返回一個單例 - 無論你在進程內傳遞它的上下文是什麼都沒有關係。請參閱:http://codereview.stackexchange.com/a/33539/27480我的包裝 –

+0

此外 - 使首選項和編輯器_final_。這將使你的類線程安全。並且有一些行可以切斷像「editor.putInt(key,value).commit();'這樣的調用。最後,既然你提供了一個工廠使cstor私人化 - 雖然你可以讓你的課程「靜態」,也許 –

0

如何使用context.getApplicationContext()作爲SharedPreferences上下文?