Java 读取共享首选项中的整数导致类强制转换异常

Java 读取共享首选项中的整数导致类强制转换异常,java,android,casting,sharedpreferences,listpreference,Java,Android,Casting,Sharedpreferences,Listpreference,我试图从Android上的一个单选设置中获得相应的数字,出于某种原因,它在LogCat中告诉我“无法在getInt将字符串转换为整数。当我在mEventLanguageSelection赋值时分析sharedPref的值时。在这一点上,它表示KEY\u LANGUAGE\u SELECTION\u LIST=2,我很确定这意味着getInt应该返回一个值2。发生了什么事 EventsActivity.java strings\u activity\u settings.xml pref_ge

我试图从Android上的一个单选设置中获得相应的数字,出于某种原因,它在LogCat中告诉我“无法在getInt将字符串转换为整数。当我在mEventLanguageSelection赋值时分析sharedPref的值时。在这一点上,它表示
KEY\u LANGUAGE\u SELECTION\u LIST=2
,我很确定这意味着getInt应该返回一个值2。发生了什么事

EventsActivity.java

strings\u activity\u settings.xml

pref_general.xml


“android:key”是字符串首选项,而不是整数。因此,您应该使用
SharedRef.getString(“键、语言、选择、列表”)和非
getInt

必须是字符串值,使用“\;”转义unicode字符的“\n”或“\uxxx”等字符


我在共享首选项中为整数对象设置了字符串值“”,因此当我使用首选项中的getInt()获取值时,我遇到了这个问题,因此请确保将值设置为首选项仅为整数,而不是字符串。

那么会返回什么?“2”或“键\语言\选择\列表=2”?最初它将返回默认值。也就是“0”。更新此首选项后,它将以字符串形式返回设置值。@mattcoker:前者。首选项基本上只是键-值对,其中键始终是
字符串
,值是Java原语(或
在较新的平台上设置
)。因为您在xml中定义了首选项,所以键和值都是字符串:键=
“键\语言\选择\列表”
,值=
“2”
。明白了!在分配mEventLanguageSelection时,我只需将右侧包装为Integer.parseInt。谢谢@MH有更好的解释:)我错过了kvp部分。
09-22 20:38:25.056: D/libEGL(28573): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
09-22 20:38:25.064: D/libEGL(28573): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
09-22 20:38:25.071: D/libEGL(28573): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
09-22 20:38:25.181: D/OpenGLRenderer(28573): Enabling debug mode 0
09-22 20:38:33.157: D/dalvikvm(28573): GC_CONCURRENT freed 92K, 2% free 9117K/9240K, paused 3ms+2ms, total 25ms
09-22 20:39:33.759: D/AndroidRuntime(28573): Shutting down VM
09-22 20:39:33.759: W/dalvikvm(28573): threadid=1: thread exiting with uncaught exception (group=0x41415930)
09-22 20:39:33.790: E/AndroidRuntime(28573): FATAL EXCEPTION: main
09-22 20:39:33.790: E/AndroidRuntime(28573): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.barjinx.barjinx/com.barjinx.barjinx.EventsActivity}: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
09-22 20:39:33.790: E/AndroidRuntime(28573):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
09-22 20:39:33.790: E/AndroidRuntime(28573):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
09-22 20:39:33.790: E/AndroidRuntime(28573):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
09-22 20:39:33.790: E/AndroidRuntime(28573):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
09-22 20:39:33.790: E/AndroidRuntime(28573):    at android.os.Handler.dispatchMessage(Handler.java:99)
09-22 20:39:33.790: E/AndroidRuntime(28573):    at android.os.Looper.loop(Looper.java:137)
09-22 20:39:33.790: E/AndroidRuntime(28573):    at android.app.ActivityThread.main(ActivityThread.java:5039)
09-22 20:39:33.790: E/AndroidRuntime(28573):    at java.lang.reflect.Method.invokeNative(Native Method)
09-22 20:39:33.790: E/AndroidRuntime(28573):    at java.lang.reflect.Method.invoke(Method.java:511)
09-22 20:39:33.790: E/AndroidRuntime(28573):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
09-22 20:39:33.790: E/AndroidRuntime(28573):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
09-22 20:39:33.790: E/AndroidRuntime(28573):    at dalvik.system.NativeStart.main(Native Method)
09-22 20:39:33.790: E/AndroidRuntime(28573): Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
09-22 20:39:33.790: E/AndroidRuntime(28573):    at android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:240)
09-22 20:39:33.790: E/AndroidRuntime(28573):    at com.barjinx.barjinx.EventsActivity.onCreate(EventsActivity.java:65)
09-22 20:39:33.790: E/AndroidRuntime(28573):    at android.app.Activity.performCreate(Activity.java:5104)
09-22 20:39:33.790: E/AndroidRuntime(28573):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
09-22 20:39:33.790: E/AndroidRuntime(28573):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
09-22 20:39:33.790: E/AndroidRuntime(28573):    ... 11 more