У меня странная проблема. В одном действии у меня есть список с полями флажка, состояние флажка зависит от общего предпочтения, но это иногда и иногда не работает (иногда это означает, что когда я проверил флажок, а затем вернулся к предыдущему действию и вернусь в свою деятельность checkbox, Значение sharedPrefrences не изменяется). Я думал, что это случилось, потому что я слишком быстро меняю активность, поэтому я добавляю логику сохранения в поток, но получаю ту же проблему.boolean в sharedPreferences не всегда сохранять правильно
Вот код, который я пробовал:
public final static String PREFERENCES_NAME = "USER_PREFERENCES";
public final static String PLAY_REQUIRED = "PLAY_REQUIRED";
sharedPreferences = getSharedPreferences(PREFERENCES_NAME, Activity.MODE_PRIVATE);
recordCheckBox=(CheckBox)findViewById(R.id.recordRequiredCheckBox);
recordCheckBox.setChecked(sharedPreferences.getBoolean(PLAY_REQUIRED,true));
findViewById(R.id.playRequiredItem).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor preferencesEditor = sharedPreferences.edit();
if(recordCheckBox.isChecked()) {
recordCheckBox.setChecked(false);
preferencesEditor.putBoolean(PLAY_REQUIRED, false).apply();
preferencesEditor.commit();
Log.i("kamil","AfterSetFalseCheckBox :: "+ sharedPreferences.getBoolean(PLAY_REQUIRED,true));
}
else {
recordCheckBox.setChecked(true);
preferencesEditor.putBoolean(PLAY_REQUIRED, true).apply();
preferencesEditor.commit();
Log.i("kamil","AfterSetTrueCheckBox :: "+ sharedPreferences.getBoolean(PLAY_REQUIRED,true));
}
}
});
Удалить. подать заявление() . apply() используется для асинхронного сохранения в SP. –
Удалить AsyncTask и использовать прямые предпочтенияEditor.putBoolean (PLAY_REQUIRED, check) .apply(); preferencesEditor.commit(); –
попробуйте удалить getApplicationContext(). 'Из' sharedPreferences = getApplicationContext(). GetSharedPreferences (PREFERENCES_NAME, Activity.MODE_PRIVATE); ' –