1

我是使用共享偏好的新手,在我第一次尝试时,我遇到了对我来说没有意义的错误。我分配一个这样的值:

int saveScore = sp.getInt("SAVE_SPOT",0); //This is intentional to get the 
                                          //default value of 0 to go to case 0


switch(saveScore){
     case 0:
           SharedPreferences.Editor edit1 = sp.edit();
           edit1.putInt("SCORE_1", score);
           edit1.putInt("SAVE_SPOT", 1);
           edit1.commit();
           break;
    case 1:
           int previous_score = sp.getInt("SCORE_1",0); // error happens here
           if(sp.getInt("SCORE_1",0)>score){

            SharedPreferences.Editor edit2 = sp.edit();
            edit2.putInt("SCORE_2", score);
            edit2.putInt("SAVE_SPOT", 2);
            edit2.commit();

             }
            else{

             SharedPreferences.Editor edit3 = sp.edit();
             edit3.putInt("SCORE_2", previous_score);
             edit3.putInt("SCORE_1", score);
             edit3.putInt("SAVE_SPOT", 1);
             edit3.commit();
                        }

        break;

每次我运行程序时,我都会收到错误“字符串不能转换为整数”。我几乎 99% 确定变量 score 是 int 而不是字符串,但我不确定为什么会收到此错误。

4

3 回答 3

1

您可以使用此函数检查以使其 100% 为 int:

public static boolean IsInteger(String s)
{
   if (s == null || s.length() == 0) return false;
   for(int i = 0; i < s.length(); i++)
   {
       if (Character.digit(s.charAt(i), 10) < 0)
           return false;
   }
   return true;
}

如果putInt不起作用,您可以Integer.parseInt(改用。

于 2013-06-29T00:50:26.677 回答
1

我解决了我的问题,每次测试都需要卸载应用程序,因为这是清除存储数据的唯一方法

于 2013-06-29T01:22:18.543 回答
0

似乎putInt()它不会让你放任何东西,除了一个 int,所以这很奇怪。你真的在这里讲述完整的故事吗?

我的猜测是,您有另一个键,其名称SCORE_1实际上存储为字符串,当您取出 int 时,它会取而代之的是字符串。这是唯一的方法。根据 API:

Throws ClassCastException if there is a preference with this name that is not an int.

所以我认为SCORE_1已经在那里,并且被存储为一个字符串。对于它的地狱,尝试离开SCORE_1使用getString()代替。

见这里:http: //developer.android.com/reference/android/content/SharedPreferences.html#getInt%28java.lang.String,%20int%29

于 2013-06-29T00:30:04.483 回答