我有一个preferences.xml
包含以下定义:
<ListPreference
android:title="@string/LimitSetting"
android:summary="@string/LimitSettingText"
android:key="limitSetting"
android:defaultValue="10"
android:entries="@array/limitArray"
android:entryValues="@array/limitValues" />
值定义如下:
<string-array name="limitArray">
<item>1 %</item>
<item>3 %</item>
<item>5 %</item>
<item>10 %</item>
<item>20 %</item>
</string-array>
<string-array name="limitValues">
<item>1</item>
<item>3</item>
<item>5</item>
<item>10</item>
<item>20</item>
</string-array>
在活动中被调用如下:
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
int offsetProgressInitial = sharedPref.getInt("limitSetting", 10);
到目前为止,一切都很好,但是当代码被实际调用时,我得到了这个错误:
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:239)
at com.test.app.NewEntryActivity.onCreate(NewEntryActivity.java:144)
at android.app.Activity.performCreate(Activity.java:5977)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2258)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365)
at android.app.ActivityThread.access$800(ActivityThread.java:148)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283)
这个错误对我来说没有任何意义。该列表仅包含可以转换为int的值,并且xml文件和代码中给出的默认值也仅表示一个数字。那么,为什么会出现此错误,以及如何解决呢?
如果您查看getInt()
内部的内容,将会发现问题:
Integer v = (Integer)mMap.get(key);
您的键“ limitSetting”返回一个String
不能转换为整数的。
您可以自己解析它:
int offsetProgressInitial = Integer.parseInt(sharedPref.getString("limitSetting", "10"));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句