2012-12-21 34 views
5

। वे सभी ठीक काम करते हैं। लेकिन मुझे वन्य फेंकने वाले वन्य में तैनात अनुप्रयोगों से दुर्घटना रिपोर्ट मिल रही है क्योंकि संकल्पइन्फो कभी-कभी शून्य होता है।समाधान करना इरादे कभी कभी अशक्त मुझे लगता है कि यह करता है एक Android ऐप्लिकेशन है, फेंकता NullPointerException

तत्काल फिक्स एनपीई को पकड़ना और इससे पहले कि यह मेरे ऐप को क्रैश करे (इससे ऊपर किया गया हो)। लेकिन मैंने इसे खुद को पुन: उत्पन्न करने के लिए दिनों की कोशिश की है और नहीं कर सकता। एक भी डिफ़ॉल्ट ब्राउज़र स्थापित किसी एमुलेटर पर, यह com.android.browser.BrowserActivity ले कर जाता है:

ResolveInfo{411ef228 com.android.browser.BrowserActivity p=0 o=0 m=0x208000} 

इसी तरह, स्थापित एक से अधिक ब्राउज़र के साथ एक हैंडसेट पर, यह कुछ हद तक अलग ढंग से हल करता है ... com.android करने के लिए। internal.app.ResolverActivity:

ResolveInfo{415c13b8 com.android.internal.app.ResolverActivity p=0 o=0 m=0x0} 

resolveActivity() डॉक्स here राज्य:

रिटर्न एक ResolveInfo अंतिम गतिविधि आशय है कि determ था युक्त सबसे अच्छा कार्रवाई करने के लिए ined। यदि कोई मिलान गतिविधि नहीं मिली तो शून्य वापस आती है। यदि एकाधिक मेलिंग गतिविधियां पाई जाती हैं और कोई डिफ़ॉल्ट सेट नहीं होता है, तो ResolveInfo को कुछ और, जैसे गतिविधि रिज़ॉल्वर होता है।

इसलिए मैंने पहली परिदृश्य को कवर किया है, गतिविधि गतिविधि का सर्वोत्तम कार्य होने के लिए निर्धारित किया गया है। इसके अलावा अंतिम परिदृश्य, बिना किसी डिफ़ॉल्ट कार्रवाई वाले एकाधिक मिलान गतिविधियों की, ResolverActivity लौट रहा है।

मैं यूआरएल की गतिविधि का अनुरोध करते समय मुझे निष्पादन एक्टिविटी() के परिदृश्य को पुन: उत्पन्न करना चाहता हूं। क्या किसी के पास कोई विचार है कि डिवाइस को रिट करने के बिना यह कैसे किया जा सकता है?

+0

एक तरफ के रूप में, अपवाद "खाने" के रूप में आप बुरा अभ्यास है। अपवादों को अच्छे कारण के लिए फेंक दिया जाता है और जब आप बाहरी संसाधन तक पहुंच रहे हैं, तो असफल होने के कई कारण हैं और आपके कोड से निपटना चाहिए। – Simon

+0

यह वास्तव में केवल एक "डमी" इरादा है जिसका उपयोग केवल ब्राउज़र प्रकार और संस्करण (यदि उपलब्ध हो) लाने के लिए किया जाता है, इसका उपयोग कभी भी किसी भी वेब पेज को पुनर्प्राप्त करने या कुछ और करने के लिए नहीं किया जाता है। मेरा मानना ​​है कि, इस मामले में, अपवाद खा रहा है और मेरे ब्राउज़र प्रकार और संस्करण तारों को "अज्ञात" में सेट करना पर्याप्त है। अपवाद के साथ मैं और कुछ नहीं करना चाहता हूं। – AWT

+2

अच्छा सवाल। मैं निश्चित रूप से निश्चित रूप से नहीं जानता लेकिन मेरा अनुमान यह है कि हो सकता है कि आपने अंतिम परिदृश्य को "डिफ़ॉल्ट कार्यवाही के साथ कई मिलान गतिविधियों को शामिल नहीं किया है" भले ही आपको लगता है कि आप हैं, क्योंकि आप MATCH_DEFAULT_ONLY निर्दिष्ट कर रहे हैं। मैंने पैकेजमैनेजर (अच्छा अगला कदम) के स्रोत को क्रैक नहीं किया है, लेकिन मुझे आश्चर्य है कि अगर आप इसे डिफ़ॉल्ट रूप से मिलान करने के लिए कहते हैं तो यह क्या करता है, और कोई डिफ़ॉल्ट नहीं है, वापसी शून्य है?क्या आपने एकाधिक ब्राउज़र वाले डिवाइस या एमुलेटर पर परीक्षण किया है और कोई निर्धारित सेट नहीं है? (सुनिश्चित करें कि यदि आप एक लिंक पर क्लिक करते हैं तो चयनकर्ता आता है) –

उत्तर

0

मैं यूआरएल की गतिविधि का अनुरोध करते समय मुझे निष्पादन एक्टिविटी() के परिदृश्य को पुन: उत्पन्न करना चाहता हूं। क्या कोई कोई विचार है कि डिवाइस को रूट किए बिना, यह कैसे किया जा सकता है?

    सेटिंग पर
  1. जाएं> एप्लिकेशन> सभी> ब्राउज़र (ओं) (शेयर ROM के साथ नेक्सस 4 कि क्रोम होगी पर) का पता लगाएँ> अक्षम
  2. प्रारंभ पकड़ने NPEs :)