Android在ListPreference上崩溃

Luí*_*sus 6 java android

我正在尝试将listpreference添加到我的应用程序中.我的xml代码如下:

  <?xml version="1.0" encoding="utf-8"?>
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/calendarsettings">
    <CheckBoxPreference android:key="syncWithCalendar"
        android:title="@string/setting_calendarsync" android:summary="@string/setting_calendarsync"></CheckBoxPreference>
    <CheckBoxPreference android:key="calendarAlarm"
        android:title="@string/settings_calendaralarm" android:summary="@string/settings_calendaralarm"></CheckBoxPreference>
</PreferenceCategory>
<PreferenceCategory android:title="@string/filters">
    <ListPreference android:key="dayFilter" android:title="@string/dayfilter"
        android:summary="@string/dayfilter" android:entries="@array/dayFilterArray"
        android:entryValues="@array/dayFilterValues" />
</PreferenceCategory>
 </PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)

我的数组值是:

    <?xml version="1.0" encoding="utf-8"?>
 <resources>
<string-array name="dayFilterArray">
 <item>a</item>
 <item>b</item>
 <item>c</item>
 <item>d</item>
 <item>e</item>
 <item>f</item>
 <item>g</item>
 </string-array>
  <string-array name="dayFilterValues">
 <item>0</item>
 <item>3</item>
 <item>7</item>
 <item>14</item>
 <item>30</item>
 <item>90</item>
 <item>365</item>
  </string-array>
 </resources>
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试进入我的首选项菜单时,它会崩溃并出现以下异常:

10-03 20:27:56.938: ERROR/AndroidRuntime(1111): Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
Run Code Online (Sandbox Code Playgroud)

这是指这行代码:

    addPreferencesFromResource(R.xml.preferences);
Run Code Online (Sandbox Code Playgroud)

对此有什么想法,为什么会这样?谢谢.

完全堆叠的痕迹:

10-03 21:13:06.828: ERROR/AndroidRuntime(3045): FATAL EXCEPTION: main
10-03 21:13:06.828: ERROR/AndroidRuntime(3045): java.lang.RuntimeException: Unable to start activity ComponentInfo{cPreferencesActivity}: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1748)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.app.ActivityThread.access$1500(ActivityThread.java:122)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1002)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.os.Looper.loop(Looper.java:132)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.app.ActivityThread.main(ActivityThread.java:4025)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at java.lang.reflect.Method.invokeNative(Native Method)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at java.lang.reflect.Method.invoke(Method.java:491)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at dalvik.system.NativeStart.main(Native Method)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045): Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:203)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.preference.Preference.getPersistedString(Preference.java:1367)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.preference.ListPreference.onSetInitialValue(ListPreference.java:278)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.preference.Preference.dispatchSetInitialValue(Preference.java:1283)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.preference.Preference.onAttachedToHierarchy(Preference.java:1095)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.preference.PreferenceGroup.addPreference(PreferenceGroup.java:156)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:97)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:38)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.preference.GenericInflater.rInflate(GenericInflater.java:488)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.preference.GenericInflater.rInflate(GenericInflater.java:493)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.preference.GenericInflater.inflate(GenericInflater.java:326)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.preference.GenericInflater.inflate(GenericInflater.java:263)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:269)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:1333)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at PreferencesActivity.onCreate(PreferencesActivity.java:33)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1712)
10-03 21:13:06.828: ERROR/AndroidRuntime(3045):     ... 11 more
Run Code Online (Sandbox Code Playgroud)

Kni*_*edi 15

您已Integer在首选项中保留了之前的内容.ListActivity期待String如此投射失败.

只需在开头调用此代码onCreate以删除错误的值,这应该是固定的:

PreferenceManager.getDefaultSharedPreferences(this).edit().remove("dayFilter").commit();
Run Code Online (Sandbox Code Playgroud)

如果它仍然发生,你可能会使用dayFilter两次键作为不同的首选项,或者Integer在代码中的某个位置继续保存该键.

如果这不起作用,请尝试从以下位置删除您的首选项:

/data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PREFS_NAME.xml
/data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PACKAGE_NAME_preferences.xml

// on some devices
/dbdata/databases/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PREFS_NAME.xml
Run Code Online (Sandbox Code Playgroud)

如果确实失败了,请尝试卸载应用程序,以便将其删除(这在我的Samsung Galaxy S上不起作用 - 共享首选项不会被删除...)