Android CheckBox isChecked() или редактирование SharedPreferences вызывает принудительное закрытие
Я пишу приложение для флэш-карт в Android, и я попытался добавить возможность добавить слово в список отзывов, установив флажок. Когда пользователь переходит к следующему слову, я вижу, установлен ли флажок. Если это так, я добавляю слово в список рецензий, а если это не так, я удаляю слово. Когда я проверил его на своем телефоне и эмуляторе, меня принудительно закрывали каждый раз, когда я пытаюсь перейти к следующему слову или на домашнюю страницу, когда установлен флажок. Я не знаю, что является причиной ошибки, потому что на странице LogCat не отображается номер строки или какая ошибка произошла.
Я могу без проблем пролистывать слова, если их не проверяли; проверка и переход к другому слову - вот что вызывает проблему, поэтому я предполагаю, что это связано с SharedPreferences.
Вот важные методы, которые у меня есть:
public void onCreate(Bundle savedInstanceState)
{
//other code
reviewCheckBox = (CheckBox) findViewById(R.id.reviewCheckBox);
prefs = getPreferences(MODE_PRIVATE);
editor = prefs.edit();
reviewCards = prefs.getAll().keySet();
}
public void home(View v)
{
if (flashCardPage.getVisibility() == View.VISIBLE)
{
if (reviewCheckBox.isChecked())
reviewCards.add(currentCard.getTerm());
else
reviewCards.remove(currentCard.getTerm());
updateReviewCards();
}
//other code
}
public void nextWord(View v)
{
currentPosition++;
if (currentPosition == flashCards.size())
{
home(wordTV);
}
else
{
if (reviewCheckBox.isChecked())
reviewCards.add(currentCard.getTerm());
else
reviewCards.remove(currentCard.getTerm());
//other code
if (reviewCards.contains(currentCard.getTerm()))
reviewCheckBox.setChecked(true);
else
reviewCheckBox.setChecked(false);
}
}
public void previousWord(View v)
{
if (currentPosition > 0)
{
if (reviewCheckBox.isChecked())
reviewCards.add(currentCard.getTerm());
else
reviewCards.remove(currentCard.getTerm());
//other code
if (reviewCards.contains(currentCard.getTerm()))
reviewCheckBox.setChecked(true);
else
reviewCheckBox.setChecked(false);
}
}
public void updateReviewCards()
{
editor.clear();
for (String card : reviewCards)
editor.putString(card, card);
editor.commit();
}
1 ответ
Набор возвращается getPreferences().getAll().keySet()
не поддерживает добавление.