从BroadcastReceiver访问另一个类的SharedPreferences

时间:2013-10-14 07:29:06

标签: android sharedpreferences

我在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

1 个答案:

答案 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";