2015-06-08 13 views
6

पर सीरियलाइजेशन पर अपवाद मेरे ऐप में मैं एक डेटा ऑब्जेक्ट को Activity से दूसरे में पास करता हूं। कोड काफी सरल है, पहले Activity पर:सैमसंग गैलेक्सी एस 5

Intent intent = new Intent(getActivity(), BlablaActivity.class); 
    intent.putExtra(Values.KEY_ITEM, item); 

और पर प्राप्त Activity:

Intent intent = getActivity().getIntent(); 
    item = (Item) intent.getSerializableExtra(Values.KEY_ITEM); 

Advertising वर्ग भी बहुत सरल है:

public class Advertising implements Serializable { 

    private static final long serialVersionUID = -7292860618498106953L; 

    private Content content; 
    private Anchor anchor; 
    private String target; 
    private String id; 

// ... 

} 

और Anchor वर्ग जो इस समस्या का कारण बन रहा है:

java.lang.IllegalArgumentException:

की वजह से: क्षेत्र de.mycompany.model.Advertising.anchor
टाइप डे है

public class Anchor implements Serializable { 

    private static final long serialVersionUID = 7360857799761417956L; 

    public String value; 
    public String label; 

// ... 

} 

मैं केवल Samsung Galaxy S5 (एस.एम.- G900F) के लिए निम्न अपवाद प्राप्त .mycompany.model.resultandexpose.Anchor, de.mycompany.model.resultandexpose.Anchor

मिला है और मैं इस का कोई अर्थ, उम्मीद वर्ग वास्तविक वर्ग है नहीं कर सकता। ऐसा लगता है कि यह एक और सैमसंग विशिष्ट समस्या है। किसी ने इसका अनुभव किया और एक फिक्स जानता है या यह पता है कि इसका क्या कारण है?

संपादित करें:

  1. हाँ, मैं ProGuard का उपयोग करके कर रहा हूँ। प्रोगार्ड फ़ाइल इस तरह दिखती है:

    -keepattributes ** - रखरखाव वर्ग! Android.support.v7.internal.view.menu। , {*;} -dontpreverify -dontoptimize -dontshrink -dontwarn **

दूसरी पंक्ति एक known bug on Samsung devices के लिए एक समाधान नहीं है और android.support.v7.internal.view.menu.* पैकेज में उन लोगों के अलावा किसी भी कक्षाएं नहीं छूना चाहिए ।

  • एंकर वर्ग का धारावाहिक संस्करण संस्करण मेरी सभी कक्षाओं में अद्वितीय है।

  • Parcelable पर स्विच करने से पूरे प्रोजेक्ट का भारी ओवरहाल होगा। Serializableके रूप में ऑब्जेक्ट पास करना सभी उपकरणों पर काम करना चाहिए।

  • Anchor कक्षा इस बग का केवल एक उदाहरण है जो कई अन्य वर्गों पर होता है जो मूल रूप से समान या बहुत समान दिखते हैं। तो यह नहीं है एक वर्ग लेकिन एक और सामान्य समस्या प्रतीत होती है।

+0

'Content' क्या है? क्या यह 'Serializable' है? बीटीडब्ल्यू अगर आप फ़ाइल पर ऑब्जेक्ट नहीं लिख रहे हैं, तो 'पार्सेलबल' पर स्विच करें। – Blackbelt

+0

@ ब्लैकबल्ट सामग्री एंकर के लिए बहुत अधिक अनुरूप है और हां, यह Serializable लागू करता है। – FWeigl

+0

क्या 'serialVersionUID' 'एंकर' के लिए अद्वितीय है? क्या यह हो सकता है कि 'Content' एक ही 'serialVersionUID' का उपयोग करता है? –

उत्तर

1

मैं तुम्हारा के लिए simillar समस्या थी, और मैंने पाया कि Galaxy S5 उपकरणों पर lolipop अद्यतन के साथ सैमसंग bugged multidex कार्यान्वयन उपयोग करता है। आप समस्या को समझाते हुए अपना question देख सकते हैं। किसी ने मेरे प्रश्न का उत्तर दिया लेकिन अगर मैंने अभी तक काम नहीं किया है तो मैंने जांच नहीं की है। शायद यह आपकी मदद करेगा।

+0

धन्यवाद, हालांकि यह समस्या का समाधान नहीं करता है लेकिन कम से कम मुझे पता है कि मैं अकेला नहीं हूं :) "नरक सैमसंग पर जाएं" स्थिति को समझाने के प्रयास भी नहीं करने के लिए। मान लीजिए मुझे अपने उपयोगकर्ताओं को यह बताना होगा कि उन्होंने एक sh *** y डिवाइस खरीदा है। – FWeigl

1

आपको इरादे से दो गतिविधियों के बीच ऑब्जेक्ट पास करने के लिए पार्सेलबल को देखना चाहिए।

आप this tutorial देख सकते हैं कि बताएं कि यह कैसे, काम करता है मैं यह भी सुझाव है एंड्रॉयड डॉक्टर पर एक नज़र पाने के लिए।

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