java - 从 SharedPreferences 检索值时,无法将获取 java.lang.String 转换为 java.lang.Integer
问题描述
我正在尝试使用 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 并尝试以相同的方式检索它们。
此外,我有一个类似的方法,但使用布尔值,它工作得很好。
解决方案
我设法解决了这个问题。代码没有任何问题,但值是在应用程序的先前版本中编写的。
在清理应用程序数据并在 Android Studio 中使缓存失效并清除缓存后,问题就消失了。
推荐阅读
- microservices - 我应该如何从其他服务加载历史事件?
- node.js - 如何防止代码多次执行
- python - 如何在 BERT 模型上应用剪枝?
- javascript - React:当元素模糊时触发一个函数
- python - 值未更新
- javascript - 使用弹出窗口动态显示 OpenLayers 5 上的多个标记
- .net-core - 如何在 .Net Standard 2.1 项目的程序集级别添加 [ExcludeFromCodeCoverage] 属性
- openstack - Kolla-ansible 打开的文件太多
- java - 最大化值数组的除数并对商求和
- python-3.x - 请参阅 SQLAlchemy 生成的 SQL CREATE TABLE 语句,而无需实际创建表