2013-06-24 9 views
9

में विधि आमंत्रण हाइलाइज्ड त्रुटि एंड्रॉइड स्टूडियो में थोड़ा उलझन में आई। मैंने पहले ग्रहण में इस तरह की त्रुटियों को देखा था।एंड्रॉइड स्टूडियो

उदाहरण:

FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction tf = fragmentManager.beginTransaction(); 
    Fragment oldFragment = fragmentManager.findFragmentByTag(AddDialogFragment.TAG); 

इस कोड को ठीक काम कर रहा है, लेकिन fragmentManager.beginTransaction(); पर प्रकाश डाला और कहते हो जाता है: विधि मंगलाचरण 'fragmentManager.beginTransaction' उत्पादन हो सकता है 'java.lang.NullPointerException' कम ... (Ctrl + एफ 1)

यह निरीक्षण निर्दिष्ट निरीक्षण दायरे में उन की स्थिति है कि हमेशा सच हैं या रिपोर्ट झूठी, साथ ही यह बताता है कि कोड के डेटा प्रवाह विश्लेषण के आधार पर, रनटाइम अपवाद को फेंक दिया जा सकता है। यह निरीक्षण न्यूलबल/नोट नूल अनुबंध उल्लंघन की भी रिपोर्ट करता है। अनुबंध का समर्थन करने के लिए टिप्पणियां कॉन्फ़िगर की जा सकती हैं (डिफ़ॉल्ट रूप से @ एनुलबल/@ एनोटन एनोटेशन एनोटेशन से .jar का उपयोग किया जाएगा)

क्या मुझे पहले नल की जांच करनी है?

FragmentManager fragmentManager = getFragmentManager(); 
    if(fragmentManager != null) 
     FragmentTransaction tf = fragmentManager.beginTransaction(); 
    Fragment oldFragment = fragmentManager.findFragmentByTag(AddDialogFragment.TAG); 

मैंने इसे पहले किसी भी टट या उदाहरण में कभी नहीं देखा है। यदि यह माफ की तुलना में एक बेवकूफ सवाल है, लेकिन मैं अभी भी एक नौसिखिया हूँ :) ।

+0

क्रम में एनपीई से बचने के लिए आपको हमेशा यह जांचना होगा कि लौटाया गया संदर्भ शून्य है – Blackbelt

उत्तर

11

जो मैंने देखा है, उससे एंड्रॉइड स्टूडियो संभावित NullPointerExceptions के बारे में बहुत अधिक चेतावनियां दिखाता है, यहां तक ​​कि विधियों के लिए भी कभी वापस नहीं आ जाएगा। मैं बस उनमें से कुछ को अनदेखा करता हूं, लेकिन सावधानी से उन सभी की जांच करना उपयोगी होता है, क्योंकि कभी-कभी मुझे एक महत्वपूर्ण याद आती है।

आप एंड्रॉयड स्रोत कोड को देखें, तो यह देखने के लिए कि getFragmentManager() लौट अशक्त कभी नहीं होगा आसान है:

public FragmentManager getFragmentManager() { 
    return mFragments; 
} 

कहाँ mFragments पूरी कक्षा के माध्यम से केवल एक बार असाइन किया गया है:

final FragmentManagerImpl mFragments = new FragmentManagerImpl(); 
+0

ठीक है, मैं देखता हूं। इस जानकारी के लिए धन्यवाद। – Katamave

+0

क्या ऐसी शब्दावली को कम करने का कोई मौका है? आईडीईए में ऐसी समस्या नहीं है। – mente

+0

@mente यह भविष्य में सबसे अधिक निश्चित रूप से तय किया जाएगा। अंतिम संस्करण पहले से ही कम चेतावनी दिखाता है। – Dalmas

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