2014-12-23 7 views
13

उत्पादन हो सकता है मैं एक कोड है:विधि मंगलाचरण जावा NullPointerException

public String getNameUpdateEvent(long id) { 
    Cursor mCursor = 
      db.rawQuery("select name from events WHERE _id=" + id + ";", null); 
    if (mCursor != null) { 
     mCursor.moveToFirst(); 
    } 
    String updateNameEvent; 
    updateNameEvent = mCursor.getString(mCursor.getColumnIndex("name")); 
    return updateNameEvent; 
}  

और मैं एक चेतावनी

Warning:(173, 45) Method invocation 'mCursor.getColumnIndex("name")' may produce 'java.lang.NullPointerException' 

कैसे मैं इसे ठीक कर सकते हैं कृपया मिल रहा है?

+0

क्यों नहीं mcursor.getString (1); – kamoor

+0

यहां एक विचार है, क्या होगा यदि 'mcursor' शून्य है और आप कॉल' mCursor.getColumnIndex ("name") 'बनाते हैं? –

उत्तर

19

आपका कर्सर null नहीं हो सकता है, इसका हमेशा कोई मूल्य होगा। लेकिन कर्सर खाली हो सकता है, इसलिए आपको सबसे पहले कर्सर में विधि moveToFirst() के साथ पहली पंक्ति में जाना चाहिए, और यदि यह true लौटाता है - इसका मतलब है कि उस कर्सर में कम से कम एक पंक्ति है, तो आप जो भी चाहते हैं उसके साथ कर सकते हैं, अगर यह वापस आती है false - इसका मतलब है कि आपकी क्वेरी के लिए कुछ भी नहीं है, इसलिए आपके पास डेटा प्राप्त करने के लिए कोई पंक्ति नहीं है।

public String getNameUpdateEvent(long id) { 
    Cursor mCursor = 
     db.rawQuery("select name from events WHERE _id=" + id + ";", null); 

    String updateNameEvent = null; 
    if (mCursor != null && mCursor.moveToFirst()) { 
     updateNameEvent = mCursor.getString(mCursor.getColumnIndex("name")); 
    } 
    return updateNameEvent; 
} 
+0

क्या यह अभी भी वही चेतावनी उत्पन्न नहीं करेगा: 'चेतावनी: (173, 45) विधि आमंत्रण' mCursor.getColumnIndex ("name") '' java.lang.NullPointerException '' –

+0

उत्पन्न कर सकता है मैंने अपना जवाब संपादित कर दिया है। मुझे यकीन नहीं है कि कच्चेQuery शून्य मूल्य वापस कर सकता है। मैंने सोचा कि ऐसा नहीं कर सकता, इसलिए चेतावनी आईडीई बग है। लेकिन अगर कर सकते हैं - तो मेरा। किसी भी मामले में यह जांच करनी चाहिए कि क्या कर्सर के मान मुझे लगता है। –

+0

ठीक है, अब ओरेस्ट संपादित समाधान काम कर रहा है, बस मुझे स्ट्रिंग updateNameEvent = null प्रारंभ करने की आवश्यकता है; । धन्यवाद! – Raddino

0

समाधान 1:: अपने कोड इस तरह दिखना चाहिए आप हार्ड कोडिंग कर रहे हैं के बाद से एसक्यूएल, क्यों नहीं कठिन कोड सूचकांक

updateNameEvent = mCursor.getString(0); 

समाधान 2:

try{ 
    updateNameEvent = mCursor.getString(mCursor.getColumnIndexOrThrow("name")); 
}catch(IllegalArgumentException ie){ 
    updateNameEvent = 0; 
} 

getColumnIndexOrThrow विधि होगा अगर कॉलम मौजूद नहीं है तो अवैध अर्ग्यूमेंट अपवाद को फेंक दें।

समाधान 1 तेज़ और सरल है।

+0

क्यों इसे चारों ओर बदलते हैं जब वह सिर्फ 'NullPointerException' पकड़ सकता है? NullPointer के साथ –

+0

, आपको अभी भी वापसी -1 की जांच करने की आवश्यकता है – kamoor

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