【问题标题】:Getting java.lang.String cannot be cast to java.lang.Integer when retrieving value from SharedPreferences从 SharedPreferences 检索值时,无法将获取 java.lang.String 转换为 java.lang.Integer
【发布时间】:2019-07-10 02:09:51
【问题描述】:

我正在尝试使用 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 并尝试以相同的方式检索它们。

另外,我有一个类似的方法,但使用 booleans 并且效果很好。

【问题讨论】:

  • 您确定使用相同的密钥来保存您的 int 和检索它吗?保存和检索值时的 keyP1Index 和 keyP2Index 是什么?
  • 发布完整代码
  • @YasiruNayanajith 更新了代码。添加了与此案例相关的内容,因为我有很多与此无关的代码。如您所见,我只使用整数,这让我感到困惑。
  • 会不会是keyP1IndexkeyP2Index键下的值是以前版本的app写的字符串?

标签: java android sharedpreferences classcastexception


【解决方案1】:

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

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

【讨论】:

  • 谢谢!你救了我的一天!我在 Flutter 中使用插件“permission_handler”和“geolocator”遇到了类似的问题。而这个问题的解决方案也是这个Android Studio“功能”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
相关资源
最近更新 更多