如何解决android中的SharedPreference错误?

时间:2016-09-30 09:10:33

标签: android

我有一个应用程序,我在共享首选项中存储一些值,但是当我检查代码然后它给出

  

SharedPreferences.edit()没有相应的commit()或apply()   调用

如何解决此警告。

对于共享偏好我使用下面提到的代码: -

private SharedPreferences m_Preference;
private SharedPreferences.Editor m_Editor;

m_Preference = context.getSharedPreferences(CStaticVar.DEAL_DOWNLOADED,Context.MODE_PRIVATE);
m_Editor = m_Preference.edit();
                    m_Editor.putInt("dealDonloadedcount",0);
                    m_Editor.apply();

5 个答案:

答案 0 :(得分:0)

要更改共享偏好设置,您需要致电

commit()

方法

示例(来自Android官方文档)

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

Android官方文档中的更多内容:https://developer.android.com/training/basics/data-storage/shared-preferences.html

答案 1 :(得分:0)

创建一个PreferencesHelper.java类

public class PreferencesHelper {

    private SharedPreferences sharedPreferences;
    private SharedPreferences.Editor editor;

    public PreferencesHelper(Context context) {
        this.sharedPreferences = context.getSharedPreferences("MyPreference", 0);
        this.editor = sharedPreferences.edit();
    }

    public String GetPreferences(String key) {
        return sharedPreferences.getString(key, "");
    }

    public void SavePreferences(String key, String value) {
        editor.putString(key, value);
        editor.commit();
    }
}

然后您可以在活动中使用以下代码

PreferencesHelper pref = new PreferencesHelper(YourActivity.this);
//To Save Preferences
pref.SavePreferences("key",value);
//To Get Preferences
pref.GetPreferences("key");

答案 2 :(得分:0)

我创建了Mridul S Kumar here提出的 PreferencesHelper 类,但是由于某种原因,该警告仍然出现。我不愿意使用@SuppressLint("CommitPrefEdits")忽略此消息。这就是为什么我要更深入地研究,然后尝试使用this post中提到的方法,然后发现消息已消失的原因。

因此,我意识到解决方案是在初始化编辑器实例变量的方法内调用 apply()方法,而不使用“ this ”(我不不建议您使用 commit(),因为Android会在发出另一个警告的同时建议您考虑在 apply()上使用 apply()。理由是“ commit将其数据写入持久性存储,而apply将在后台对其进行处理”。

我不确定为什么,但是根据this post,我确实知道在这种情况下不需要使用它。变量 editor 不是要明确区分的引用。

因此,以下代码应该可以解决您的问题:

public class PreferencesHelper {
      private SharedPreferences sharedPreferences;
      private SharedPreferences.Editor editor;

      public PreferencesHelper(Context context) {
           this.sharedPreferences = context.getSharedPreferences("MyPreference", 0);
           this.editor = sharedPreferences.edit();

           boolean firstTime = sharedPreferences.getBoolean("first", true);
           if (firstTime) {
               editor.putBoolean("first", false);
               editor.apply();
           }
      }

      public String GetPreferences(String key) {
           return sharedPreferences.getString(key, "");
      }

      public void SavePreferences(String key, String value) {
           editor.putString(key, value);
           editor.commit();
      }
   }
}

顺便说一下,我正在使用 Android 3.1.4

答案 3 :(得分:-1)

因为如果更改共享首选项,则应该提交()或apply()。 否则没有任何意义。删除警告单击该特定行上的黄色标记并禁用检查。

答案 4 :(得分:-1)

使用

editor.commit();

取代

 editor.apply();