2013-09-23 5 views
0

Android에서 하나의 선택 설정에서 해당 숫자를 얻으려고하고 있는데 어떤 이유로 LogCat에서 "getInt에서 문자열을 정수로 변환 할 수 없습니다. 그 시점에서 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", "");docs

에서하지 getInt

를 사용한다 \ '을,' 유니 코드 문자의 경우 '\ n'또는 '\ uxxxx'와 같은 문자를 이스케이프 처리합니다.

+0

그래서 무엇을 반환할까요? "2"또는 "KEY_LANGUAGE_SELECTION_LIST = 2"? – mattcoker

+0

초기 값은 defaultvalue를 반환합니다. "0"입니다. 이 환경 설정을 업데이트하면 설정된 값이 문자열로 반환됩니다. – prijupaul

+0

@mattcoker : 전자. 환경 설정은 기본적으로 키 - 값 쌍입니다. 키는 항상 '문자열'이고, 값은 자바 프리미티브 (또는 최신 플랫폼의 경우 Set )입니다. xml에서 환경 설정을 정의 했으므로 키와 값은 모두 문자열입니다. key =' "KEY_LANGUAGE_SELECTION_LIST"', value =' "2"'. –

0

내가 정수 객체에 대해 공유 우선 문자열 값을 ""로 설정, 그래서 나는이 문제를 얻고 환경에서의 getInt()를 사용하여 값을 얻을 때, 그래서 확인하십시오 당신 취향에 설정 값은 정수, 문자열이 아님.

관련 문제