2015-01-12 9 views
12

पर वर्चुअल विधि 'बूलियन java.lang.String.equalsIgnoreCase (java.lang.String)' का आह्वान करने का प्रयास मुझे रनटाइम पर यह त्रुटि मिल रही है।NullPointerException: एक शून्य ऑब्जेक्ट संदर्भ

java.lang.RuntimeException: 'बूलियन java.lang.String.equalsIgnoreCase (java.lang.String)' एक पर प्रयास आभासी विधि आह्वान करने के लिए: गतिविधि ComponentInfo java.lang.NullPointerException प्रारंभ करने में अक्षम अशक्त वस्तु संदर्भ

StackTrace:

01-12 03:44:54.270: E/AndroidRuntime(1437): FATAL EXCEPTION: main 
01-12 03:44:54.270: E/AndroidRuntime(1437): Process: home.saket, PID: 1437 
01-12 03:44:54.270: E/AndroidRuntime(1437): java.lang.RuntimeException: Unable to start activity ComponentInfo{home.saket/home.saket.addmember.Add_Update_User}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equalsIgnoreCase(java.lang.String)' on a null object reference 
01-12 03:44:54.270: E/AndroidRuntime(1437):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
01-12 03:44:54.270: E/AndroidRuntime(1437):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
01-12 03:44:54.270: E/AndroidRuntime(1437):  at android.app.ActivityThread.access$800(ActivityThread.java:144) 
01-12 03:44:54.270: E/AndroidRuntime(1437):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
01-12 03:44:54.270: E/AndroidRuntime(1437):  at android.os.Handler.dispatchMessage(Handler.java:102) 
01-12 03:44:54.270: E/AndroidRuntime(1437):  at android.os.Looper.loop(Looper.java:135) 
01-12 03:44:54.270: E/AndroidRuntime(1437):  at android.app.ActivityThread.main(ActivityThread.java:5221) 
01-12 03:44:54.270: E/AndroidRuntime(1437):  at java.lang.reflect.Method.invoke(Native Method) 
01-12 03:44:54.270: E/AndroidRuntime(1437):  at java.lang.reflect.Method.invoke(Method.java:372) 
01-12 03:44:54.270: E/AndroidRuntime(1437):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
01-12 03:44:54.270: E/AndroidRuntime(1437):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
01-12 03:44:54.270: E/AndroidRuntime(1437): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equalsIgnoreCase(java.lang.String)' on a null object reference 
01-12 03:44:54.270: E/AndroidRuntime(1437):  at home.saket.addmember.Add_Update_User.onCreate(Add_Update_User.java:38) 
01-12 03:44:54.270: E/AndroidRuntime(1437):  at android.app.Activity.performCreate(Activity.java:5933) 
01-12 03:44:54.270: E/AndroidRuntime(1437):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
01-12 03:44:54.270: E/AndroidRuntime(1437):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
01-12 03:44:54.270: E/AndroidRuntime(1437):  ... 10 more 
01-12 03:44:54.272: W/ActivityManager(472): Force finishing activity home.saket/.addmember.Add_Update_User 
01-12 03:44:54.273: E/ActivityManager(472): Invalid thumbnail dimensions: 384x384 

नीचे मैं पोस्ट कर रहा हूँ कोड और poi त्रुटि रेखा nted बाहर।

Add_Update_User.java:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add_update_screen); 

    // set screen 
    Set_Add_Update_Screen(); 

    // set visibility of view as per calling activity 
    String called_from = getIntent().getStringExtra("called"); 

    if (called_from.equalsIgnoreCase("add")) { --->38th error line 
     add_view.setVisibility(View.VISIBLE); 
     update_view.setVisibility(View.GONE); 
    } else { 

     update_view.setVisibility(View.VISIBLE); 
     add_view.setVisibility(View.GONE); 
     USER_ID = Integer.parseInt(getIntent().getStringExtra("USER_ID")); 

     Contact c = dbHandler.Get_Contact(USER_ID); 

     add_name.setText(c.getName()); 
     add_mobile.setText(c.getPhoneNumber()); 
     add_email.setText(c.getEmail()); 
     // dbHandler.close(); 
    } 
    } 
+2

क्या आप इसे मेरे लिए कोशिश कर सकते हैं? अगर ("जोड़ें" .equalsIgnoreCase (called_from)) { –

+0

@ किकबट्टोवस्की मैंने तुम्हारी कोशिश की। ठीक है। क्या आप अपना उत्तर पोस्ट करते हैं और इसे समझाते हैं? – Steve

+0

मैं अपना उत्तर पोस्ट नहीं कर सकता क्योंकि आपकी पोस्ट को डुप्लिकेट के रूप में चिह्नित किया गया है। :( –

उत्तर

35

called_fromnull होना चाहिए। जैसे

if (called_from != null && called_from.equalsIgnoreCase("add")) { 

कि हालत के खिलाफ एक टेस्ट जोड़ें या आप रखने Yoda conditions इस्तेमाल कर सकते हैं (के रूप में प्रति लाभ जुड़ा हुआ विकिपीडिया लेख में यह भी असुरक्षित null व्यवहार के कुछ प्रकार वे वर्णित किया जा सकता हल कर सकते हैं सशर्त बयान) की बाईं ओर अभिव्यक्ति के स्थायी भाग

if ("add".equalsIgnoreCase(called_from)) { // <-- safe if called_from is null 
+13

मुझे योड की स्थिति पसंद है ... + 1 वह विचार! –

+0

क्या आप योड स्थितियों को यहां बता सकते हैं? –

+0

@KickButtowski कुछ स्पष्टीकरण शामिल करने के लिए संपादित किया गया। –

5

यह त्रुटि लाइन है:

if (called_from.equalsIgnoreCase("add")) { --->38th error line 

इसका मतलब है कि called_from रिक्त है। सरल जांच अगर यह ऊपर रिक्त है:

String called_from = getIntent().getStringExtra("called"); 

if(called_from == null) { 
    called_from = "empty string"; 
} 
if (called_from.equalsIgnoreCase("add")) { 
    // do whatever 
} else { 
    // do whatever 
} 

इस तरह, यदि called_from रिक्त है, यह आपके अगर बयान के else हिस्सा अमल करेंगे।

4

अपवाद इस बयान के कारण होता है,

called_from.equalsIgnoreCase("add") 

यह प्रतीत कि पिछले बयान

String called_from = getIntent().getStringExtra("called"); 

एक अशक्त संदर्भ लौट आए।

आप यह जांच सकते हैं कि इस गतिविधि को शुरू करने के इरादे में ऐसी कुंजी "कहा जाता है"।

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