2012-10-12 10 views
14

का उपयोग करते समय स्ट्रिंग टू बूलियन नहीं डाला जा सकता है मुझे बहुत अजीब त्रुटि मिल रही है। मेरे पास 2 गतिविधियां हैं I दोनों को मैं SharedPreferencesMODE_PRIVATE का उपयोग कर (अगर यह मायने रखती है) हो रही है sp = getPreferences(MODE_PRIVATE); द्वारा प्रत्येक गतिविधि के onCreate() मैं sp.getBoolean(IntroActivity.SHOW_INTRO, true)अजीब अपवाद: GetBoolean

IntroActivity इस ठीक काम करता है पर फोन कर रहा हूँ पर। लेकिन जब मैं मुख्य गतिविधि में कोशिश कर रहा हूँ, मैं इस

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); 

अगर यह मायने रखती है, कोड जो अपवाद फेंकता एक बटन के onClick

+0

क्या आप कोड पोस्ट कर सकते हैं ताकि प्रोग्रामर आपकी मदद कर सकें? :) –

+0

आपको किस कोड की आवश्यकता है? मैंने SharePectivity.java –

+0

। यद्यपि दिखाने के लिए बहुत कुछ नहीं .. –

उत्तर

45

यदि उस कुंजी के साथ कभी भी स्ट्रिंग हो रही है, भले ही दुर्घटना हो, तब तक यह तब तक रहेगा जब तक आप ऐप के डेटा को साफ़ नहीं करते या अनइंस्टॉल नहीं करते। यह अभी भी होने पर यह अनइंस्टॉल करने का प्रयास करें।

+0

ठीक है, यह काम करता है .. अजीब है कि यह एक गतिविधि पर काम करता है और दूसरे में यह अपवाद फेंक दिया, लेकिन अनइंस्टॉल करने और इसे पुनर्स्थापित करने के बाद काम करता है .. धन्यवाद! –

+0

क्या आपने 'स्पष्ट()' के बाद प्रतिबद्ध() 'या' लागू() 'किया था? इसके अलावा, प्राथमिकता प्रत्येक गतिविधि के लिए व्यक्तिगत हैं। यदि आप वास्तव में उन्हें * साझा करना चाहते हैं, तो उन्हें एक ही गतिविधि के साथ बनाएं, दोनों नहीं। – Geobits

+0

मैंने किया, लेकिन केवल एक गतिविधि में। अब मुझे साझाप्रेषण समान तरीके से मिल रहा है @ निशांत ने कहा और उन्हें साझा किया। मुझे एहसास नहीं हुआ कि जिस तरह से मैंने किया, मैं साझा नहीं कर रहा था, और केवल एक बार मंजूरी दे दी। यही कारण है कि एक काम किया और एक नहीं किया। धन्यवाद! –

1

मैं यह सोचते हैं रहा हूँ अंदर है कि

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

तो आप कर सकते हैं ऐसा करें

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

कोशिश की, संकलन त्रुटि प्राप्त करना 'प्रकार बूलियन प्रकार में विधि पार्सबोलियन (स्ट्रिंग) तर्क (बूलियन) के लिए लागू नहीं है क्योंकि पहली पंक्ति एक बूलियन –

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, सत्य) // यह पंक्ति एक स्ट्रिंग मान देता है।

तो आप नीचे दिए गए क्या करना है,

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

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

इस यह निश्चित रूप से काम करता है होगा की कोशिश करो।

+0

गलत। यह किसी अन्य डिवाइस में दुर्घटनाग्रस्त हो जाएगा। – Avijit

0

यह सामान्य गलती है जो हर कोई कुंजी के साथ करेगी, मुझे लगता है कि IntroActivity.SHOW_INTRO = "xyz_key" यदि आप किसी अन्य कॉन्स्टेंट के लिए "xyz_key" का उपयोग करते हैं तो यह त्रुटि होगी, इसलिए कुंजी का मान होना चाहिए अद्वितीय..मुबारक कोडिंग :)

0

जब गलती से, मैं दो वरीयताओं हीकुंजी एक्सएमएल फ़ाइल android:key="your_key" में करने के लिए दे दिया है इस अपवाद मिल गया!

तो आपकी सेटिंग्स को जांचने में दोहरी मदद कर सकते हैं। एक्सएमएल मदद कर सकता है।

संबंधित मुद्दे