2015-01-12 21 views
12

Ricevo questo errore in fase di esecuzione.NullPointerException: tentativo di richiamare il metodo virtuale 'boolean java.lang.String.equalsIgnoreCase (java.lang.String)' su un riferimento oggetto nullo

java.lang.RuntimeException: Impossibile avviare l'attività ComponentInfo java.lang.NullPointerException: Tentativo di richiamare il metodo virtuale 'booleana java.lang.String.equalsIgnoreCase (java.lang.String)' su un riferimento oggetto null

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 

Sotto sto postato i codici e poi ha eliminato la riga di errore.

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

puoi provare questo per me plz? if ("add" .equalsIgnoreCase (called_from)) { –

+0

@KickButtowski ho provato yours.works fine.can di postare la vostra risposta e spieghi? – Steve

+0

Non riesco a pubblicare la mia risposta poiché il tuo post è stato contrassegnato come duplicato. :( –

risposta

35

called_from deve essere null. Aggiungere un test contro quella condizione come

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

o si potrebbe usare Yoda conditions (per le vantaggi nel articolo di Wikipedia collegato può anche risolvere alcuni tipi di pericoloso null comportamento che può essere descritto come ponendo il costante porzione di espressione sul lato sinistro del condizionale)

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

Mi piacciono le condizioni Yoda ... + 1 per quell'idea! –

+0

puoi spiegare le condizioni Yoda qui? –

+0

@KickButtowski Modificato per includere alcune spiegazioni. –

5

Questa è la linea di errore:

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

Ciò significa che called_from è nullo. semplice controllo se si tratta di nulla di cui sopra:

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

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

questo modo, se called_from è null, sarà eseguire la parte della vostra else if.

4

l'eccezione si verifica a causa di questa affermazione,

called_from.equalsIgnoreCase("add") 

sembra che l'affermazione precedente

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

restituito un riferimento null.

È possibile verificare se l'intenzione di avviare questa attività contiene un tasto "chiamato".

Problemi correlati

 Problemi correlati