2012-10-12 5 views
14

매우 이상한 오류가 발생합니다. 나는 2 번의 활동을하고 있습니다. 모두에 나는 각 활동의가 onCreate() 나는이 작품을 잘 IntroActivitysp.getBoolean(IntroActivity.SHOW_INTRO, true)이상한 예외 : getBoolean을 사용할 때 String을 Boolean으로 변환 할 수 없습니다.

를 전화 드렸습니다에 sp = getPreferences(MODE_PRIVATE);에 의해 (이 중요한 경우) MODE_PRIVATE를 사용하여 SharedPreferences을 얻고있다. 나는 주요 활동에 노력하고있어 때, 나는이

10-12 04:55:23.208: E/AndroidRuntime(11668): FATAL EXCEPTION: main 
10-12 04:55:23.208: E/AndroidRuntime(11668): java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean 
10-12 04:55:23.208: E/AndroidRuntime(11668): at android.app.SharedPreferencesImpl.getBoolean(SharedPreferencesImpl.java:242) 
10-12 04:55:23.208: E/AndroidRuntime(11668): at com.lablabla.parkme.ParkMeActivity$2.onClick(ParkMeActivity.java:194) 
10-12 04:55:23.208: E/AndroidRuntime(11668): at android.view.View.performClick(View.java:4084) 
10-12 04:55:23.208: E/AndroidRuntime(11668): at android.view.View$PerformClick.run(View.java:16966) 
10-12 04:55:23.208: E/AndroidRuntime(11668): at android.os.Handler.handleCallback(Handler.java:615) 
10-12 04:55:23.208: E/AndroidRuntime(11668): at android.os.Handler.dispatchMessage(Handler.java:92) 
10-12 04:55:23.208: E/AndroidRuntime(11668): at android.os.Looper.loop(Looper.java:137) 
10-12 04:55:23.208: E/AndroidRuntime(11668): at android.app.ActivityThread.main(ActivityThread.java:4745) 
10-12 04:55:23.208: E/AndroidRuntime(11668): at java.lang.reflect.Method.invokeNative(Native Method) 
10-12 04:55:23.208: E/AndroidRuntime(11668): at java.lang.reflect.Method.invoke(Method.java:511) 
10-12 04:55:23.208: E/AndroidRuntime(11668): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
10-12 04:55:23.208: E/AndroidRuntime(11668): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
10-12 04:55:23.208: E/AndroidRuntime(11668): at dalvik.system.NativeStart.main(Native Method) 

가 나는 같은 키

모든 아이디어와 중간에 String 곳을두고 있지 않다 것을 확인했다 얻고있다?

감사합니다.

편집 : 일부 코드 :이 중요한 경우

//onCreate() 
sp = getPreferences(MODE_PRIVATE); 

// other method 
boolean showIntro = sp.getBoolean(IntroActivity.SHOW_INTRO, true); // Exception is here 
showIntroCheckBox.setChecked(showIntro); 

예외를 throw 코드가 버튼의 onClick

+0

프로그래머가 도움을 줄 수 있도록 코드를 게시 할 수 있습니까? :) –

+0

어떤 코드가 필요합니까? SharedPrefernces ..와 관련된 모든 것을 썼습니다. –

+0

에서 ParkMeActivity.java –

답변

45

키가있는 문자열이있는 경우 실수로 앱의 데이터를 지우거나 제거 할 때까지 거기에 머물러 있습니다. 그것을 제거해도 여전히 발생하는지 확인하십시오.

+0

글쎄, 그건 .. 그것은 하나의 활동에 작동하고 다른 그것은 예외를 던져 이상한지만, 제거하고 그것을 재설치 후 .. 작동합니다 감사합니다! –

+0

'clear()'다음에'commit()'또는'apply()'했습니까? 또한 선호도는 각 활동에 대해 개별적입니다. 실제로 * 공유 *하려는 경우 하나의 활동으로 작성하고 둘 다 작성하지 마십시오. – Geobits

+0

나는 한 번만 활동했다. 이제 SharedPreferences를 @Nishant가 말한 것과 같은 방식으로 공유하고 있습니다. 나는 내가 그랬던 것처럼 깨닫지 못했습니다. 나는 나누지 않았으며 오직 한 번만 지웠습니다. 그래서 한 사람은 일했고 한 사람은 그렇지 못했습니다. 감사합니다. –

1

내가 가정하고 내부에 그

sp.getBoolean(IntroActivity.SHOW_INTRO, true)// this line returns a String value. 

그래서 당신이 할 수있는 이렇게하면

boolean showIntro = Boolean.parseBoolean(sp.getBoolean(IntroActivity.SHOW_INTRO, true)); 
+0

첫 번째 라인이 부울을 반환하기 때문에 컴파일 오류가 발생했습니다. 부울 타입의 메소드 parseBoolean (String)은 인수 (부울)에 적용 할 수 없습니다. –

3

예외이 Android 방법에서 발생 :이 오류의 수

public boolean getBoolean(String key, boolean defValue) { 
    synchronized (this) { 
     awaitLoadedLocked(); 
     Boolean v = (Boolean)mMap.get(key); // On this line 
     return v != null ? v : defValue; 
    } 
} 

유일한 감각이 당신의 코드에서 다른 곳 문자열의 키 IntroActivity.SHOW_INTRO를 재사용한다는 것이다.

1

SharedPreference에서 부울 값을 설정하려면 다음 코드를 사용하여 (IntroActivity를

SharedPreferences appSharedPrefs = PreferenceManager 
      .getDefaultSharedPreferences(this.getApplicationContext()); 
    boolean showIntro = appSharedPrefs.getBoolean(IntroActivity.SHOW_INTRO, true); 
0

라인 sp.getBoolean :

SharedPreferences appSharedPrefs = PreferenceManager 
      .getDefaultSharedPreferences(this.getApplicationContext()); 
    Editor prefsEditor = appSharedPrefs.edit(); 
    prefsEditor.putBoolean(IntroActivity.SHOW_INTRO, true); 
    prefsEditor.commit(); 

을 그리고 SharedPreference 사용에서이 코드를 부울 값을 검색 .SHOW_INTRO, true) //이 줄은 문자열 값을 반환합니다.

그래서 당신은

String flag=sp.getBoolean(IntroActivity.SHOW_INTRO, true); 

if(flag.equalsIgnoreCase("true")){ 
    boolean showIntro = true; 
}else{ 
    boolean showIntro = false; 
} 

가 확실히 작동하는 것이 시도, 아래로해야한다.

+0

잘못되었습니다. 다른 기기에서 충돌이 발생합니다. – Avijit

0

이것은 모든 사람이 키를 만들 것이다 일반적인 실수, 나는, 당신은 또 다른 상수에 대해 동일한 "xyz_key"를 사용하는 경우이 오류가 너무 키의 값에 발생합니다 IntroActivity.SHOW_INTRO = "xyz_key을"추측 독특한..해피 코딩 :)

0

실수로, 나는이 환경 설정 XML 파일 android:key="your_key"에서 같은에게 제공 한 경우,이 예외를 얻었다!

그래서 settings.xml을 두 번 확인하면 도움이 될 수 있습니다.

관련 문제