我正在开发一个示例应用程序,其中我有“ListPreference”,如下所示:
<ListPreference
android:defaultValue="180"
android:entries="@array/pref_sync_frequency_titles"
android:entryValues="@array/pref_sync_frequency_values"
android:key="sync_frequency"
android:negativeButtonText="@null"
android:positiveButtonText="@null"
android:title="@string/pref_title_sync_frequency"/>
我将它绑定到这样的整数数组:
<string name="pref_title_sync_frequency">Sync frequency</string>
<string-array name="pref_sync_frequency_titles">
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>3 hours</item>
<item>6 hours</item>
<item>12 hours</item>
<item>24 hours</item>
<item>Never</item>
</string-array>
<integer-array name="pref_sync_frequency_values">
<item>15</item>
<item>30</item>
<item>60</item>
<item>180</item>
<item>360</item>
<item>720</item>
<item>1440</item>
<item>-1</item>
</integer-array>
根据我的理解,PreferenceFragment提供了首选项的持久性,我从中扩展了我拥有ListPreference的片段。除了在Android Studio中创建设置活动时提供的内容之外,我没有任何额外的代码:
public static class DataSyncPreferenceFragment extends PreferenceFragment
现在的问题是,当我尝试读取首选项时,我想将其读作这样的整数:
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
return sharedPref.getInt("sync_frequency", 0);
但是我得到了这个异常:java.lang.ClassCastException: java.lang.String无法强制转换为java.lang.Integer
我可以将首选项读作sting然后转换为int,但我希望首选项已经存储为Integer,因为我将它绑定到整数数组。为什么它存储为字符串,是否可以将其存储为整数?