当前位置: 首页 > 面试题库 >

sharedPref.getInt:无法将java.lang.String强制转换为java.lang.Integer

百里海超
2023-03-14
问题内容

我有一个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"));


 类似资料: