自定义首选项不在SharedPreferences中存储值?

时间:2013-12-13 10:26:06

标签: android sharedpreferences

我写了一个自定义DialogPreference,其中包含两个NumberPickers。在"onDialogClose"我希望将每个值合并,然后使用“persistLong”存储在SharedPreferences中。

首选项工作得很好,并且所有内容都按预期调用,但是当我尝试从SharedPreferences检索值时,似乎没有使用我提供的密钥存储任何内容。

知道可能出现什么问题吗?

2 个答案:

答案 0 :(得分: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为   如果没有设置或找到值,则为布尔值,0为int值   给定的偏好键。

答案 1 :(得分:0)

如何将context.getApplicationContext()用于SharedPreferences上下文?