android - 自定义首选项未在 SharedPreferences 中存储值?

标签 android sharedpreferences

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

首选项工作正常,一切都按预期调用,但当我尝试从 SharedPreferences 检索值时,似乎没有使用我提供的 key 存储任何内容。

知道哪里出了问题吗?

最佳答案

您可能没有提供正确的 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) 轻松获取此类的实例,然后只需调用其方法来存储或检索值。

Note. The above sample class returns an empty string, false for boolean values and 0 for int values, if no value are set or found for a given preference key.

关于android - 自定义首选项未在 SharedPreferences 中存储值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20564116/

相关文章:

java - SharedPreferences 可以通过但不保存

android - 如何将 registerOnSharedPreferenceChangeListener 添加到 ListActivity?

java - mapper.writeValue() 方法出错

Android Eclipse ddms线程 View 透视图

java - 从 Android 项目中的包中检索类列表

java - 共享首选项不保存或加载数据

安卓。用户访问 SharedPreferences

java - 同时启动两个进程

android - 如何设置 View 的背景颜色

android - 共享首选项是否在运行时存储在内存中?