我有一个应用程序,我在共享首选项中存储一些值,但是当我检查代码然后它给出
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();
答案 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();