无法从我的服务访问SharedPreferences

时间:2012-05-25 13:53:36

标签: android sharedpreferences

我正在尝试做什么


Hello Guys。

我得到了一个服务,只要在SharedPreference中启动或停止服务(started = true / stopped = false),就将布尔设置为true或false。现在,当我尝试在我的Activity中获取布尔值时,总是找不到它。我该如何解决这个......这是你的代码。

代码


我服务中的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 Methode中给出的默认值。

感谢您的提前帮助

狩猎

3 个答案:

答案 0 :(得分:3)

以下是我在其中一个应用中成功使用的一些代码。它用于应用程序的各个部分,例如来自活动和服务:

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 :(得分:1)

尝试在服务和活动中使用PreferenceManager的getDefaultSharedPreferences(上下文关联)方法。

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)。

答案 2 :(得分:0)

只需像活动一样构建你的prefs对象。唯一的区别是拉动应用程序的上下文。

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

Boolean tmpBool = prefs.getBoolean("PREF_NAME", null);