यह त्रुटि sporadically होने लगता है, जो विषम है। यह आमतौर पर ठीक काम करता है, लेकिन कभी-कभी यह रेंगता है।BadParcelableException - BroadcastReceiver इरादा क्रैश
public void onReceive(Context context, Intent intent) {
MyCustomResponseMsg message = new MyCustomResponseMsg((MyMessage) intent.getParcelableExtra(MyMessage.EXTRA_MESSAGE_KEY));
// do stuff with the message
setResultCode(Activity.RESULT_OK);
}
और यहाँ अपवाद है::
01-16 10:05:03.834: ERROR/AndroidRuntime(13533): FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start receiver com.(path-to-broadcast-receiver).MyReqReceiver:
android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.(path-to-my-message).MyMessage
at android.app.ActivityThread.handleReceiver(ActivityThread.java:1805)
at android.app.ActivityThread.access$2400(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:981)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.(path-to-my-message).MyMessage
at android.os.Parcel.readParcelable(Parcel.java:1958)
at android.os.Parcel.readValue(Parcel.java:1846)
at android.os.Parcel.readMapInternal(Parcel.java:2083)
at android.os.Bundle.unparcel(Bundle.java:208)
at android.os.Bundle.getParcelable(Bundle.java:1100)
at android.content.Intent.getParcelableExtra(Intent.java:3437)
at com.(path).MyReceiver.onReceive(My ReqReceiver.java:23)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:1794)
... 10 more
त्रुटि getParcelableExtra लाइन पर होने लगता है यहाँ मेरी कोड है, जो एक BroadcastReceiver में है। "माईमेसेज" वर्ग (स्पष्ट रूप से मेरे स्वयं के प्रोजेक्ट में कुछ अलग नाम दिया गया है) वास्तव में मौजूद है; यह एक पुस्तकालय में निहित है। यह ज्यादातर समय काम करता है, लेकिन ऐसे समय होते हैं जब प्रसारण प्राप्त होने पर हर बार क्रैश हो सकता है।
मुझे एहसास है कि इसे छोड़ने के लिए बहुत कुछ नहीं है, लेकिन मैं सिर्फ यह देखना चाहता था कि रिसीवर में ऐसा कुछ करने के लिए मैं कुछ भी कर सकता हूं ताकि यह क्रैश न हो। या यदि ब्रॉडकास्ट भेजने के पक्ष में यह निश्चित रूप से कुछ है, तो यदि आवश्यक हो तो मैं उस पर ध्यान केंद्रित कर सकता हूं। लेकिन अंतरिम में, मैं बस यह सुनिश्चित करना चाहता था कि यह मेरे उद्देश्यों के लिए उचित रूप से सेटअप हो। मैंने इस दुर्घटना के साथ अन्य समान पदों की जांच की है, लेकिन मुझे ऐसा कोई प्रतीत नहीं होता है जिसमें ब्रॉडकास्ट रिसीवर में इस विशिष्ट प्रकार के पार्सलबल को शामिल किया जा सके।
इस पर किसी भी मार्गदर्शन के लिए अग्रिम धन्यवाद!
संपादित यहाँ MyMessage के लिए निर्माता, कैसा दिखता है अगर जरूरत है:
public MyMessage(Parcel in) {
field1 = in.readInt();
field2 = in.readString();
field3 = in.readString();
}
आह कि समझ में आता है। मैंने वास्तव में यह प्रश्न रखने के लिए अपना प्रश्न अपडेट किया कि कन्स्ट्रक्टर MyMessage के लिए कैसा दिखता है। ऐसा लगता है कि यह कोड केवल मानक "readString()" और "readInt()" विधियों का उपयोग कर रहा है। उत्सुक अगर उन्हें बदला जाना चाहिए? मैं ऐसा करने के लिए सावधान रहूंगा, क्योंकि इस माईमेज क्लास का उपयोग हमारे विभिन्न आवेदन ढांचे में कई अलग-अलग स्थानों में किया जाता है। तो मुझे उम्मीद है कि एक समाधान है जिसमें MyMessage क्लास को छूना शामिल नहीं है? मैं अनमोल प्रक्रिया के बारे में खुद को परिचित करने के लिए इस दौरान गहराई से पढ़ूंगा। – svguerin3
@ svguerin3 मैं अपने जवाब को अपडेट किया है, तो कृपया एक नजर है। –
आशय के लिए onReceive में classloader की स्थापना जोड़ने दुर्भाग्य से यहाँ तक कि जब, दुर्घटना अभी भी वही BadParcelableException साथ होता है। :(अब मैं कर रहा हूँ सच में स्टम्प्ड। मैं आपकी मदद के इस के साथ परवाह किए बिना, किसी भी संयोग से सराहना करते हैं। किसी भी अन्य विचार? – svguerin3