我编写了一个自定义的 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/