0

我在 MyClass (这是一个活动)中有一个 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()方法中BroadCastReceiver,我想调用loadPreferences()加载首选项。我该怎么做?我尝试创建一个对象MyClass并调用.loadPreferences(),但它会在类的这一行中给我一个空指针异常loadPreferences

 SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
4

1 回答 1

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";
于 2013-10-14T07:43:48.670 回答