0

每当我尝试getInt()SharedPreference应用程序崩溃时,我都可以将首选项作为地图进行迭代。例如,请参阅下面的星号线:

private void loadPref(){
    myPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    int sf = DEFAULT_VALUE;

    Map<String,?> keys = myPrefs.getAll();
    for(Map.Entry<String,?> entry : keys.entrySet()){
        if (entry.getKey().contentEquals("score_format"))
            // this works:                                         //*****
            sf = Integer.parseInt(entry.getValue().toString());    //*****
    }

    // but this does not:                                          //*****  
    // sf = myPrefs.getInt("score_format", DEFAULT_VALUE);         //*****
    setScoreFormat(sf);
}

显然,我的偏好正在被保存(正如这个示例和跨多个活动的工作偏好屏幕所证明的那样)。在尝试访问 getDefaultSharedPreferences 之前,我正在调用 super.onCreate()。

我应该考虑什么来理解为什么这段代码不起作用?为什么地图可以工作,但“getInt”方法却不行?我确实注意到,如果我尝试显式转换键值,应用程序也会崩溃......我必须先将它转换为字符串。

我错过了什么?

4

2 回答 2

0

看起来与score_formatkey 关联的对象是 aString但您正试图获取它,因为int这是一个错误。

于 2013-09-26T04:16:54.917 回答
0

如果您不想解析,请确保您输入意图的分数putExtra是 int 类型,而不是字符串。

于 2013-09-26T04:27:46.600 回答