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」メソッドが機能しないのはなぜですか? キー値を明示的にキャストしようとすると、アプリもクラッシュすることに気付きました...最初に toString にキャストする必要がありました。

私は何が欠けていますか?

4

2 に答える 2

0

解析したくない場合は、インテントに入れるスコアがputExtra文字列ではなく int 型であることを確認してください。

于 2013-09-26T04:27:46.600 に答える
0

score_formatキーに関連付けられたオブジェクトは のようStringですが、それを取得しようとしているintのは間違いです。

于 2013-09-26T04:16:54.917 に答える