java - 从 SharedPreferences 检索值时无法将获取的 java.lang.String 转换为 java.lang.Integer

标签 java android sharedpreferences classcastexception

我正在尝试使用 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: Unable to start activity ComponentInfo{...}: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

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

此外,我有一个类似的方法,但使用的是 boolean 值,而且效果很好。

最佳答案

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

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

关于java - 从 SharedPreferences 检索值时无法将获取的 java.lang.String 转换为 java.lang.Integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54717683/

相关文章:

android - 单击自定义 DialogPreference 按钮上的事件

java - 编写 bash 或其他脚本以重新启动另一个脚本

java - 如何获取 Java 类路径分隔符?

java - 运算符 && 不能应用于 boolean,char

android-layout - addView方法动态添加View时onDraw调用两次

java - Android:将 SharedPreferences 与选项卡布局结合使用

android - preferencefragment 没有找到 id android 的 View

java - Netbeans 使用 pom.xml (Maven) 而不是 build.gradle (Gradle)

android - 如何在 React Native Es6 上检测 OnResume 和 onPause

android - DirectByteBufferException 鲸鱼在 fragment 中获取不同的 map