【问题标题】:Can't Get Shared Preference Value Even Though Values Exist即使值存在也无法获得共享偏好值
【发布时间】:2013-09-26 04:09:39
【问题描述】:

任何时候我尝试从SharedPreferencegetInt(),我的应用程序都会崩溃,但我可以将首选项作为地图进行迭代。例如,请参阅下面带星号的行:

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”方法却不行?我确实注意到,如果我尝试显式转换键值,应用程序也会崩溃……我必须先将它转换为字符串。

我错过了什么?

【问题讨论】:

  • 可以贴一下异常的logcat吗?以及DEFAULT_VALUE的定义?

标签: android sharedpreferences preferences


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    看起来与score_format 键关联的对象是String,但您试图将其作为int 获取,这是一个错误。

    【讨论】:

    • 是的,完全正确。不敢相信我错过了。到处都是该死的树,我看不到森林。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    相关资源
    最近更新 更多