12

我正在尝试设置首选项活动,但我的应用程序不断崩溃,我得到以下 logcat:

致命异常:主要 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。我还尝试卸载并重新安装该应用程序以清除缓存,但没有任何效果。

解决:

“您在 XML 中的首选项,即使您设置 android:inputType="number" 仍存储为字符串”(由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

也可以抛出异常,如果

  • 您正在使用相同key的存储两种或多种不同类型的values
  • 首先,您将值存储为String,然后更改了值的存储和检索实现int。对于这种情况,只需清除缓存。
于 2018-05-12T13:54:18.547 回答
-1

如果您使用正确的数据类型存储首选项,那么这应该不是问题。请在此处查看JavaDoc

于 2013-07-24T20:58:49.797 回答