2013-10-14 20 views
0

SharedPreferences我有一个savePreferences和loadPreferences方法写成MyClass中(这是一个活性)如下:访问另一个类的从广播接收器

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

onReceive()一个BroadcastReceiver类方法BroadCastReceiver,我想打电话给loadPreferences()加载首选项。我该怎么做?我试图使一个对象的MyClass,并呼吁.loadPreferences(),但它会给我一个空指针异常在此行​​中loadPreferences类:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

回答

1

您可以将您的活动中一个静态方法来封装的读取调用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以上的几个itms,那么您应该重新使用SharedPreferences对象,而不是为每个项目创建一个新对象。

或者,你可以只是参考"ToggleValue"作为公共静态最后弦乐和读取接收自己的默认SharedPreferences

public static final String PREFS_TOGGLE = "ToggleValue"; 
+0

IM在你的代码有点困惑。在接收器中,我要调用loadTogglePreferences()吗?我怎么称呼它? – user2779837

+0

你需要调用'YourActivityClass.loadTogglePreferences(context)' – flx