我正在尝试使用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并尝试以相同的方式检索它们的事实。
此外,我也有类似的方法,但是使用 booleans ,并且效果很好。
答案 0 :(得分:0)
我设法解决了这个问题。代码没有什么错,但是它的值是在该应用的先前版本中编写的。
在清除应用程序数据并在Android Studio中无效并清除缓存后,问题消失了。