2016-06-26 8 views
24

इस त्रुटि को मेरे ऐप के उत्पादन संस्करण में प्रारंभ करना प्रारंभ किया।एक null ऑब्जेक्ट संदर्भ पर Intent.migrateExtraStreamToClipData()

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference 

कोई स्पष्ट रेखा नहीं है जिस पर यह वास्तव में होता है लेकिन मैंने हाल ही में अपना समर्थन लाइब्रेरी संस्करण 24.0.0 में बदल दिया है। यहाँ पूर्ण स्टैकट्रेस है:

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference 
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1494) 
    at android.app.Activity.startActivityForResult(Activity.java:3745) 
    at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48) 
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75) 
    at android.app.Activity.startActivityForResult(Activity.java:3706) 
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:871) 
    at com.google.android.gms.common.internal.zzi$1.zztD(Unknown Source) 
    at com.google.android.gms.common.internal.zzi.onClick(Unknown Source) 
    at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:162) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5254) 
    at java.lang.reflect.Method.invoke(Method.java) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

संपादित करें: मैं भी नोट करने के लिए है कि उपयोगकर्ताओं को यह त्रुटि मिलती की 100% भी निहित हैं चाहता हूँ। यह 23.4.0 पर भी होता है ... मेरे पास एक संभावित संबंधित त्रुटि भी होती है जो एक ही समय में पॉप-अप के संबंध में बेस 64.decode फ़ंक्शन के साथ होती है।

संपादित 2: मुझे दूसरे दिन एंड्रॉइड देव से कुछ मदद मिली। उन्होंने सुझाव दिया कि मैं अपने प्रोजेक्ट के Google Play सेवा संस्करण को अपडेट करता हूं और ऐसा लगता है कि अब तक मदद मिली है। मैं अपने उपयोगकर्ताओं से परिणाम प्राप्त करने के लिए कुछ और दिन इंतजार करूंगा लेकिन प्रारंभिक लॉग वादा कर रहे हैं।

मैं पहले 9.0.2 का उपयोग कर रहा था लेकिन अब मैं 9.2.0 पर हूं।

संपादित करें 3: 9.2.0 को अपडेट करने से क्रैश में मदद नहीं मिली। मुझे अभी भी रूट उपयोगकर्ताओं से एक ही त्रुटि मिल रही है। मैंने ध्यान दिया है कि क्रैश होने वाले उपयोगकर्ताओं को एंड्रॉइड 6.0 से नीचे है इसलिए मैं एक लाइव डिवाइस पर परीक्षण कर रहा हूं और ASAP अपडेट करूँगा।

+2

यह मेरे एमुलेटर पर भी होता है। सबसे पहले मुझे एक पॉपअप कह रहा है: ... Google Play सेवाओं पर निर्भर करता है, जो आपके डिवाइस द्वारा समर्थित नहीं है। सहायता के लिए निर्माता से संपर्क करें। मैं डीबग करने की कोशिश करूंगा। – Wirling

+0

@ वार्लिंग अब जब आप इसका जिक्र करते हैं, तो मुझे संदेह है कि मेरे उपयोगकर्ता के डिवाइस की बजाय Google की क्लाउड टेस्ट लैब डिवाइस से त्रुटि रिपोर्ट आ रही हैं। मैंने हाल ही में अपने डिवाइस को विशेष रूप से इस त्रुटि के परीक्षण के लिए रूट किया है और मैंने इसे अभी तक पॉप अप नहीं देखा है। – c0deblooded

+0

मैं Google Play Services विजन लाइब्रेरी (9.2) का उपयोग करके इसे पुन: उत्पन्न करने में सक्षम हूं। क्यूआर कोड पहचान के लिए कैमरा शुरू करने से पहले मैं 'isGooglePlayServicesAvailable' विधि का उपयोग कर एक सरल जांच करता हूं। यदि यह उपलब्ध नहीं है तो मैं 'getErrorDialog' विधि से संवाद दिखाऊंगा। अपडेट करने का प्रयास करते समय यह दुर्घटनाग्रस्त हो जाएगा। केवल रूट डिवाइस पर हो रहा है। – Brian

उत्तर

6

ऐसा लगता है कि त्रुटि उन डिवाइसों पर होती है जहां Google Play सेवाएं स्थापित नहीं होती हैं, तो पारित इरादा तब शून्य हो जाएगा।

आप सुनिश्चित कर सकते हैं कि आपकी गतिविधि में प्रारंभ एक्टिविटीफॉर रिसेट विधि को ओवरराइड करके इरादा पास नहीं किया गया है।

@Override  
public void startActivityForResult(Intent intent, int requestCode) { 
    if (intent == null) {  
     intent = new Intent();   
    }  
    super.startActivityForResult(intent, requestCode); 
} 
+0

हम्म मेरे लिए काम नहीं करता है, मुझे अभी भी दुर्घटना मिलती है। – jlively

+0

@jlivelyare आप वैकल्पिक रूप से एक कोशिश पकड़ ब्लॉक में सुपर कॉल कर सकते हैं। इस तरह शून्य सूचक सूचक अपवाद के बिना पकड़ा जाएगा। यह सुनिश्चित करने के लिए एकमात्र चीज यह है कि गतिविधि जो ओवरराइड करता है एक्टिविटीफॉर रिसेट सही है। – MVojtkovszky

+0

क्षमा करें, लेकिन पृथ्वी पर क्या खाली इरादे से गतिविधि शुरू करने का मुद्दा है? –

-1

thats वास्तव में

@Override 
public void startActivityForResult(Intent intent, int requestCode) { 
    try { 
     super.startActivityForResult(intent, requestCode); 
    } catch (Exception ignored){} 
} 
+2

पकड़ने की कोशिश करें धीमे ब्लॉक हैं। इस परिदृश्य के लिए एक शून्य जांच पर्याप्त होगी। – Ajeet

3

काम करता है इस प्रश्न का एक सा पुराना है, लेकिन मैं सिर्फ यह पर एक अद्यतन साझा करना चाहते थे। this Github issue on the GCM project के मुताबिक इस मुद्दे को Google Play Services संस्करण 9.4.0 में हल किया जाना चाहिए। स्वीकार्य उत्तर को भी काम करना चाहिए (एक मध्यवर्ती पैच के रूप में), लेकिन यदि आप अपनी Google Play सेवा लाइब्रेरी को अपडेट करते हैं तो इस समस्या को हल किया जाना चाहिए।

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