2015-03-12 11 views
19

मुझे Android पर ClassCastException के साथ एक अजीब समस्या है। एक वर्ग एक ही कक्षा के लिए casted नहीं किया जा सकता:एंड्रॉइड पर उसी वर्ग के क्लास कास्ट अपवाद

java.lang.RuntimeException: Unable to start activity ComponentInfo: java.lang.ClassCastException: com.example.model.BadeWrapper cannot be cast to com.example.model.BadgeWrapper 

java.lang.ClassCastException: com.example.events.widgets.TouchyWebView cannot be cast to com.example.events.widgets.TouchyWebView 

java.lang.ClassCastException: com.example.friends.widgets.FriendsTabView cannot be cast to com.example.friends.widgets.FriendsTabView 

जब मैं त्रुटि के साथ लाइन मिल जाए, सब यह होता आईडी द्वारा दृश्य की खोज या तर्क के साथ टुकड़ा पैदा कर रही है जैसे:

FriendsTabView friendsTabView; 
friendsTabView = (FriendsTabView) view.findViewById(R.id.friends_bottom_tab_panel); 

मेरी BugSense के रूप में बताता है, यह समस्या सैमसंग गैलेक्सी एस 5 पर एंड्रॉइड 5.0.0 (सैमसंग एसएम-जी 9 00 एफ) के साथ होती है। (एंड्रॉयड 5.0.1)

  • सैमसंग गैलेक्सी एस 3 मिनी (एंड्रॉयड 4.1.2)
  • LG G2 मिनी (एंड्रॉयड 4,4

    • मोटोरोला मोटो जी 1 जनरल: मैं अपने अन्य उपकरणों पर इस समस्या को कभी नहीं मिला .2)
    • सोनी एक्सपीरिया एल (एंड्रॉयड 4.1.2)

    किसी को भी करने से पहले इस समस्या से मुलाकात की? इसे ठीक करने का कोई तरीका है?

  • +0

    आप XML लेआउट के प्रासंगिक भागों पोस्ट कर सकते हैं, FriendsTabView (यदि उपलब्ध हो) के लिए जावा क्लास और जावा फ़ाइल जहां आप इस FriendsTabView का उपयोग करते हैं? – OcuS

    +0

    कोई बात नहीं, समस्या Samsung Galaxy S5 डिवाइस के साथ है, मेरे जवाब देखने – rwojcik

    उत्तर

    24

    ठीक है, जहां समस्या है। ऐसा लगता है कि एंड्रॉइड 5.0 पर सैमसंग शायद मल्टीडेक्स (एंड्रॉइड एल पूर्वावलोकन में इस्तेमाल किया गया) के पुराने कार्यान्वयन का उपयोग करता है, इसलिए यदि आपका ऐप 64k सीमा से अधिक है, तो यह आपके ऐप पर यादृच्छिक स्थानों में दुर्घटनाग्रस्त हो जाएगा जहां आप (ExampleClass) object कास्ट का उपयोग करते हैं।

    इस समस्या पर अधिक जानकारी here और here मिल सकती है।

    हम यह भी क्रैश प्रतिदिन हजारों बार होते हैं। क्रैशलिटिक्स ने दुर्घटना की रिपोर्ट 100% सैमसंग डिवाइस (99% "एसएम जी 9 00 एफ [क्यू]" डिवाइस), और 100% एंड्रॉइड 5.x. सैमसंग + लॉलीपॉप उपकरणों पर एक और मल्टीडेक्स मुद्दा लगता है, जैसा कि # 3 में ajaskev रिपोर्ट है।

    ऐसा लगता है कि सैमसंग इस समस्या को हल करने तक हमें प्रतीक्षा करनी है। अभी हम सब कुछ कर सकते हैं बग रिपोर्ट के साथ मेलबॉक्स पर हमारा स्पैम देख रहा है :)

    +0

    http://www.gsmarena.com/samsung_norway_putting_android_5_for_galaxy_s5_and_s4_on_hold-news-11507.php अब भी Lolipop अद्यतन इस मुद्दे – rwojcik

    +0

    सैमसंग की वजह से होल्ड पर है: भी नहीं एक बार। –

    -1

    दरअसल एक समाधान है।

    सैमसंग संशोधित का उपयोग करता है makeDexElements विधि के संस्करण (अतिरिक्त तर्क के साथ) और समाधान यह केवल इस मॉडल के लिए कॉल करने के लिए MultiDex के स्रोत कोड को संशोधित करने के लिए है:

    /** 
        * A wrapper around 
        * {@code private static final dalvik.system.DexPathList#makeDexElements}. 
        */ 
        private static Object[] makeDexElements(
          Object dexPathList, ArrayList<File> files, File optimizedDirectory, 
          ArrayList<IOException> suppressedExceptions) 
          throws IllegalAccessException, InvocationTargetException, 
          NoSuchMethodException { 
    
         Method makeDexElements = findMethod(dexPathList, "makeDexElements", ArrayList.class, File.class, ArrayList.class, ClassLoader.class); 
         makeDexElements.setAccessible(true); 
         return (Object[]) makeDexElements.invoke(dexPathList, files, optimizedDirectory, suppressedExceptions, 
           SamsungS5.class.getClassLoader()); 
        } 
    
    +0

    यह ठीक होगा कि किसी को अपने डिवाइस पर सही करना होगा? – FWeigl

    +0

    @ एस्कोरबिन यह अपने आवेदन – pixel

    +0

    में पैच मल्टीडेक्स लाइब्रेरी के लिए डेवलपर पर है जहां वास्तव में यह परिवर्तन किया जाना चाहिए? – FWeigl

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