2012-05-25 3 views
1

То, что я пытаюсь сделатьне удается получить доступ к SharedPreferences из моей службы


Привет, ребята.

У меня есть служба, которая имеет значение boolean для true или false, когда служба запускается или останавливается (start = true/stop = false) в SharedPreference. Теперь, когда я пытаюсь получить Boolean в моей деятельности, он всегда не находит его. Как я могу это решить ... Вот код для вас, парни.

Код


Methode в моей службы:

private void setStarted(boolean started) { 
    // SharedPreferences casten 

    mPrefs = this.getSharedPreferences(LOG_TAG, MODE_PRIVATE); 
    // Boolean in SharedPreferences hinzufügen 
    SharedPreferences.Editor editor = mPrefs.edit(); 
    editor.clear().apply(); 
    editor.putBoolean(PREF_STARTED, started).commit(); 
    editor.commit(); 

    //mPrefs.edit().putBoolean(PREF_STARTED, started).commit(); 

    Log.d(LOG_TAG, "Variabel " + mPrefs.getBoolean(PREF_STARTED, false)); 
} 

В моей деятельности

// mPrefs caten 
     mPrefs = this.getSharedPreferences(GPSService.LOG_TAG, MODE_PRIVATE); 

     // boolean holen ob service gestartet oder nicht 
     run = mPrefs.getBoolean(GPSService.PREF_STARTED, false); 

Как получить логическое оттуда? Он всегда возвращает мне значение по умолчанию, которое я должен был дать в методе getBoolean.

Спасибо за помощь заранее

сафари

ответ

2

Вот какой-то код, который я успешно использую в одном из моих приложений. Он используется в различных частях приложения, например. как от деятельности, так и от услуг:

void putValue(Context context, String pref, boolean value) { 
    SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, Activity.MODE_PRIVATE); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putBoolean(pref, value); 
    editor.commit();     
} 

boolean getValue(Context context, String value, boolean defaultValue) { 
    SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, Activity.MODE_PRIVATE); 
    return settings.getBoolean(value, defaultValue); 
} 
1

попробуйте использовать getDefaultSharedPreferences (контекст Context) метод PreferenceManager в обоих ваших услуг и вашей деятельности.

private void setStarted(boolean started) { 

    mPrefs = PreferenceManager.getDefaultSharedPreferences(this); 
    mPrefs.edit().putBoolean(PREF_STARTED, started).commit(); 

    Log.d(LOG_TAG, "Variabel " + mPrefs.getBoolean(PREF_STARTED, false)); 
} 

В вашей деятельности

mPrefs = PreferenceManager.getDefaultSharedPreferences(this);  
run = mPrefs.getBoolean(GPSService.PREF_STARTED, false); 

Кроме того, убедитесь вы:

  • Никогда не называйте .clear() в редакторе.
  • Вы используете PreferenceManager.getDefaultSharedPreferences (this) всюду.
+0

Как это должно выглядеть и почему я не могу использовать SharedPreferences? Пожалуйста, улучши свой подход: D thx! – safari

+0

Вы можете использовать общие настройки как в действии, так и в сервисе, нет проблем. :) –

+0

Итак, если я понял это право, я могу использовать эту строку «mPrefs = PreferenceManager.getDefaultSharedPreferences (this);» кода в обеих активах и вытащить значения, как я сделал это раньше? Right = – safari

0

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

SharedPreferences prefs = _ getApplicationContext().getSharedPreferences("com.example.appname", Activity.MODE_PRIVATE); 

Boolean tmpBool = prefs.getBoolean("PREF_NAME", null); 
Смежные вопросы