Android CheckBox isChecked () или редактирование SharedPreferences вызывает принудительное закрытие - PullRequest
0 голосов
/ 31 июля 2011

Я пишу приложение для флэш-карт в 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 Ответ

0 голосов
/ 31 июля 2011

Набор, возвращаемый getPreferences().getAll().keySet(), не поддерживает добавление.

...