2013-10-14 1 views
0

У меня есть метод savePreferences и loadPreferences записать следующий образом MyClass (который является активностью):доступа к другим методам классов игровой SharedPreferences от BroadcastReceiver

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); 
} 

У меня также есть класс BroadcastReceiver имени MyBroadCast

В onReceive() метод 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); 
} 

Если вы читаете больше, чем несколько itms от SharedPreferences, вы должны обязательно повторно использовать объект SharedPreferences вместо того, чтобы создавать новый для каждого элемента.

Или, вы можете просто ссылаться на "ToggleValue" как общественный статической конечной строки и чтения по умолчанию SharedPreferences в приемнике сами:

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

Im немного запутался в вашем коде. В приемнике я вызываю loadTogglePreferences()? Как мне это назвать? – user2779837

+0

вам нужно вызвать 'YourActivityClass.loadTogglePreferences (context)' – flx

Смежные вопросы