12

設定アクティビティをセットアップしようとしていますが、アプリがクラッシュし続け、次の logcat が表示されます:

致命的な例外: main java.lang.RuntimeException: アクティビティを開始できません ComponentInfo{com.appthing.myapp/com.appthing.myapp.Main}: java.lang.ClassCastException: java.lang.String を java.lang にキャストできません。整数

原因: java.lang.ClassCastException: java.lang.String を java.lang.Integer 07-24 16:37:59.556 にキャストできません: E/AndroidRuntime(17384): at android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.ジャワ:240)

私のMainアクティビティでは、onResume()メソッド内に次のコードがあります。

    SeekBar tipSeekBar = (SeekBar) findViewById(R.id.tipSeekBar);
    SeekBar splitSeekBar = (SeekBar) findViewById(R.id.splitSeekBar);

    SharedPreferences preferences = PreferenceManager
            .getDefaultSharedPreferences(this);

    tipSeekBar.setProgress(preferences.getInt("defaultTip", 15));
    splitSeekBar.setProgress(preferences.getInt("defaultSplit", 1));
    tipSeekBar.setMax(preferences.getInt("maxTip", 25));
    splitSeekBar.setMax(preferences.getInt("maxSplit", 10));

これが私が Preference クラスに持っているものです(要求されたとおり):

addPreferencesFromResource(R.layout.preferences);
// I was told in tutorials this is all I need in the oncreate method

文字列について何かを言っている理由がわかりません。私の値はすべて整数でありandroid:inputType="number"、int のみを入力できるようにするために使用しています。また、キャッシュをクリアするためにアプリをアンインストールして再インストールしようとしましたが、何も機能しません。

解決済み:

「android:inputType="number" を設定しても、XML の設定は文字列として保存されます」 (by Waza_Be )。私がしなければならなかったのはInteger.parseInt()、正しい値を取得することだけです。

4

3 に答える 3

25

設定した場合でも、XML の設定android:inputType="number"は文字列として保存されます

次の 2 つの選択肢があります。

1) 「あまり良くない」:Integer.parseInt( preferences.getString("defaultTip", "15"));

2) 独自のタイプの整数設定を使用します。最初に設定するのはより複雑ですが、実際にはより優れています(同様の質問はこちら: https://stackoverflow.com/a/3755608/327402 )

于 2013-07-24T21:04:14.780 に答える
-1

適切なデータ型で設定を保存している場合、問題はありません。こちらのJavaDoc をご覧ください。

于 2013-07-24T20:58:49.797 に答える