Android CheckBox isChecked() 或编辑 SharedPreferences 导致强制关闭

发布于 2024-11-27 15:40:02 字数 1967 浏览 3 评论 0原文

我正在 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();
}

I'm writing a flash card app in Android, and I tried to add the ability to add a word to a review list by having a checkbox. When the user goes to the next word, I see whether the checkbox is checked. If it is, I add the word to the review list, and if it isn't, I remove the word. When I tested it on my phone and the emulator, I got a forced close every time I try to go to the next word or to the home page when the checkbox is checked. I don't know what's causing the error because in the LogCat page, it doesn't show the line number or what error happened.

I can flip through the words without a problem when I don't have them checked; checking it and going to another word is what causes a problem, so I'm guessing it has to do with the SharedPreferences.

Here are the important methods I have:

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();
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

就此别过 2024-12-04 15:40:02

getPreferences().getAll().keySet() 返回的集合不支持添加。

The set returned by getPreferences().getAll().keySet() does not support adding.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文