2013-09-23 30 views
0

我想从Android上的单个选择设置中获取相应的编号,并且出于某种原因它告诉我在LogCat中“字符串不能在getInt中转换为Integer。当我在mEventLanguageSelection赋值时分析sharedPref的值时,它说KEY_LANGUAGE_SELECTION_LIST=2,我相当肯定意味着getInt应该返回值2.发生了什么?阅读共享首选项中的整数导致类抛出异常

EventsActivity .java
http://pastebin.com/85qa72bN

strings_activity_settings.xml
http://pastebin.com/LBVqpjMF

pref_general.xml
http://pastebin.com/NGcRwGhz

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 

回答

0

的 '机器人:键' 是一个字符串偏好与不是整数。因此,你应该使用sharedPref.getString("KEY_LANGUAGE_SELECTION_LIST", "");而不是getInt

docs

必须是一个字符串值,使用 '\;'转义字符如'\ n'或'\ uxxxx'以获得unicode字符。

+0

那么,会返回什么? “2”还是“KEY_LANGUAGE_SELECTION_LIST = 2”? – mattcoker

+0

最初它会返回默认值。哪个是“0”。一旦你更新了这个首选项,它将以字符串的形式返回设置值。 – prijupaul

+0

@mattcoker:前者。首选项基本上只是键值对,其中键总是一个“String”,而值是一个Java原语(或在新平台上设置)。因为您在xml中定义了首选项,所以键和值都是字符串:key ='“KEY_LANGUAGE_SELECTION_LIST”',value ='“2”'。 –

0

我设置字符串值“”共享偏好整数对象,所以当我得到使用getInt()从偏好我得到这个问题的价值,所以请确保您设定值成偏好是整数只有,不是字符串。