我在MyClass(这是一个Activity)中编写了一个savePreferences和loadPreferences方法,如下所示:
private void savePreference(String key, boolean value) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
boolean toggleValue = sharedPreferences.getBoolean("ToggleValue", true);
Editor editor = sharedPreferences.edit();
editor.putBoolean(key, value);
editor.commit();
}
public void loadPreferences() {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
boolean toggleValue = sharedPreferences.getBoolean("ToggleValue", true);
if (toggleValue) {
toggle.setChecked(true);
alertStatus=true;
} else {
toggle.setChecked(false);
alertStatus=false;
}
myHold.setStatus(alertStatus);
}
我还有一个名为MyBroadCast的BroadCastReceiver类
在onReceive()
的{{1}}方法中,我想调用BroadCastReceiver
来加载首选项。我怎么能这样做?我尝试创建loadPreferences()
的对象并调用MyClass
,但它会在.loadPreferences()
类的这一行中给我一个空指针异常:
loadPreferences
答案 0 :(得分:1)
您可以在Activity中添加静态方法,以封装对SharedPreferences的读取调用:
public static boolean loadTogglePreferences(Context context) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
return sharedPreferences.getBoolean("ToggleValue", true);
}
为了减少代码冗余,您可能希望在现有代码中使用此方法:
public void loadPreferences() {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
boolean toggleValue = loadTogglePreferences(this);
toggle.setChecked(toggleValue);
alertStatus = toggleValue;
myHold.setStatus(alertStatus);
}
如果您从SharedPreferences
阅读的内容多于几个,则应该重复使用SharedPreferences
对象,而不是为每个项目创建一个新对象。
或者,您可以将"ToggleValue"
作为公共静态最终字符串引用,并自行读取接收器中的默认SharedPreferences
:
public static final String PREFS_TOGGLE = "ToggleValue";