उत्पन्न कर सकता है निम्न स्निपेट एंड्रॉइड स्टूडियो में लिंट चेतावनी उत्पन्न करता है।Dereference 'java.lang.NullPointerException'
Bundle extras = getIntent().getExtras();
if (extras != null && extras.getString(REDIRECT_KEY) != null) {
switch (extras.getString(REDIRECT_KEY)) { ...
extras.getString(REDIRECT_KEY)
चेतावनी के
भिन्नता 'extras.getString (REDIRECT_KEY)' का उत्पादन हो सकता 'java.lang.NullPointerException'
लेकिन मैं डॉन का उत्पादन यह कोई परिदृश्य नहीं दिखता है जहां यह हो सकता है। क्या यह लिंट चेक में एक बग है, यह बस मेरे नल-चेक को पहले में नहीं पहचानता है? या मुझे कुछ याद आती है?
संपादित करें: निम्न के कोड में परिवर्तन, चेतावनी
if(getIntent() != null && getIntent().getStringExtra(REDIRECT_KEY) != null){
switch (getIntent().getStringExtra(REDIRECT_KEY)){
...
}
}
को दूर किया था लेकिन यह केवल चला गया है क्योंकि जिस तरह से, इस फाहा जाँच काम करता है (कम से कम मुझे लगता है)। अगर मैं इस चेक को अधिक infos दिखाने के लिए, यह एक बिंदु पर कहते हैं
चर, विधि मानकों और मान (या नहीं-अशक्त क्रमशः) @Nullable के रूप में चिह्नित या @NotNull नल के रूप में इलाज कर रहे हैं और के दौरान इस्तेमाल किया nullability जाँच करने के लिए विश्लेषण
अनुबंध बंडल की और आशय का स्रोत कोड को देखते हुए पता चलता है:
/**
* Retrieve extended data from the intent.
*
* @param name The name of the desired item.
*
* @return the value of an item that previously added with putExtra()
* or null if no String value was found.
*
* @see #putExtra(String, String)
*/
public String getStringExtra(String name) {
return mExtras == null ? null : mExtras.getString(name);
}
और BaseBundle
/**
* Returns the value associated with the given key, or null if
* no mapping of the desired type exists for the given key or a null
* value is explicitly associated with the key.
*
* @param key a String, or null
* @return a String value, or null
*/
@Nullable
public String getString(@Nullable String key) {
unparcel();
final Object o = mMap.get(key);
try {
return (String) o;
} catch (ClassCastException e) {
typeWarning(key, o, "String", e);
return null;
}
}
जैसा कि आप देख सकते हैं, बेसबंडल अपने वापसी मूल्यों को @Nullable पर सेट करता है, जबकि इरादा नहीं करता है। इसलिए getStringExtra
का उपयोग केवल symoptoms को हटा देता है, कारण नहीं। मुझे अभी भी लगता है कि यह मेरी तरफ गलत कोडिंग के बजाय अपर्याप्त लिंट चेक के कारण होता है। या क्या कोई अभी भी एक परिदृश्य देखता है, जहां एक नल पॉइंटर फेंक दिया जा सकता है?
यह चेतावनी कौन सी रेखा देता है? दूसरा या तीसरा? – Ferrybig
मुझे लगता है कि एक्स्ट्रा से हर बार स्ट्रिंग प्राप्त करने के बजाय, आपको इसे एक चर के लिए असाइन करना चाहिए। क्योंकि कुछ अतिरिक्त स्थितियों पर आपका अतिरिक्त शून्य हो सकता है।स्निपेट में – Pragnani
तीसरी पंक्ति, या छवि में लाइन 80। मैं extras == शून्य के लिए और getString() == शून्य के परिणाम के लिए जाँच कर रहा हूँ। दूसरी पंक्ति में देखें। – AlbAtNf