【问题标题】:Can't access SharedPreferences from my Service无法从我的服务访问 SharedPreferences
【发布时间】:2012-05-25 13:53:36
【问题描述】:

我要做什么


大家好。

我得到了一个服务,当服务在 SharedPreference 中启动或停止(启动 = 真 / 停止 = 假)时,它的布尔值设置为真或假。现在,当我尝试在我的活动中获取布尔值时,它总是找不到它。我该如何解决这个问题...这是给你们的代码。

代码


我的服务中的方法:

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 中提供的默认值。

提前感谢您的帮助

野生动物园

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      尝试在您的服务和活动中使用 PreferenceManager 的 getDefaultSharedPreferences(Context context) 方法。

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

      【讨论】:

      • 这应该是什么样子,为什么我不能使用 SharedPreferences?请改进您的答案:D thx!
      • 您可以在活动和服务中使用共享首选项,没有问题。 :)
      • 所以如果我理解这个权利,我可以使用这一行“mPrefs = PreferenceManager.getDefaultSharedPreferences(this);”两个活动中的代码并像我以前那样取出值?右=
      • 好的。我记得在 SharedPreferences 和 boolean 方面遇到了一些麻烦。让我看看我做了什么来解决它。
      • 从我的日志中看到,服务写入了正确的值,但我总是得到错误的值.....
      【解决方案3】:

      只需像作为活动的一部分一样构建您的首选项对象。唯一的区别是拉入应用程序的上下文。

      SharedPreferences prefs = _ getApplicationContext().getSharedPreferences("com.example.appname", Activity.MODE_PRIVATE);
      
      Boolean tmpBool = prefs.getBoolean("PREF_NAME", null);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-20
        相关资源
        最近更新 更多