从SharedPreferences中检索值时,无法将java.lang.String转换为java.lang.Integer

问题描述 投票:1回答:1

我试图使用SharedPreferences存储一些值并在应用程序打开时检索它们,但我在检索一些int值时遇到问题。

我已经尝试将值转换为字符串,然后使用Integer.ParseInt来检索值,但我仍然收到错误。

这是我应该存储的值:

void putP1Index(int index) {
    SharedPreferences.Editor mEditor = mPrefs.edit();
    mEditor.putInt(keyP1Index, index);
    mEditor.apply();
}

void putP2Index(int index) {
    SharedPreferences.Editor mEditor = mPrefs.edit();
    mEditor.putInt(keyP2Index, index);
    mEditor.apply();
}

他们从不同的班级保存:

private MainGame mainGame;
private SavedValues savedValues;


ScoreSetter(MainGame mainGame) {
    this.mainGame = mainGame;
    savedValues = new SavedValues(mainGame);
}

void setScore(who) {
switch (who) {
        case 1:
            ++indexP1;
            savedValues.putP1Index(indexP1);
//Some code...
        case 2:
            ++indexP2;
            savedValues.putP2Index(indexP2);
//Some code...
}
}

我试着像这样检索它:

int getP1Index() {
    return mPrefs.getInt(keyP1Index, 0);
}

int getP2Index() {
    return mPrefs.getInt(keyP2Index, 0);
}

通过从不同的类调用它们:

void getSavedValues() {
    indexP1 = savedValues.getP1Index();
    indexP2 = savedValues.getP2Index();
}

在getSavedValues方法上我得到错误

java.lang.RuntimeException:无法启动活动ComponentInfo {...}:java.lang.ClassCastException:java.lang.String无法强制转换为java.lang.Integer

我不明白的事实是我将值保存为int并尝试以相同的方式检索它们。

此外,我有一个类似的方法,但与布尔值,它工作得很好。

java android sharedpreferences classcastexception
1个回答
1
投票

我设法解决了这个问题。代码没有任何问题,但是使用了以前版本的应用程序编写的值。

清理应用程序数据并在Android Studio中无效并清除缓存后,问题就消失了。

© www.soinside.com 2019 - 2024. All rights reserved.