web-dev-qa-db-fra.com

NullPointerException: tentative d'appeler la méthode virtuelle 'boolean Java.lang.String.equalsIgnoreCase (Java.lang.String)' sur une référence d'objet null

Je reçois cette erreur au moment de l'exécution.

Java.lang.RuntimeException: impossible de démarrer l'activité ComponentInfo Java.lang.NullPointerException: tentative d'appeler la méthode virtuelle 'boolean Java.lang.String.equalsIgnoreCase (Java.lang.String)' sur une référence d'objet 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

Ci-dessous, je suis posté les codes et souligné la ligne d'erreur.

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();
    }
    }
21
Steve

called_from doit être null. Ajouter un test contre cette condition comme

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

ou vous pouvez utiliser conditions Yoda (selon les avantages de l'article lié à Wikipedia , il peut également résolvez certains types de comportements non sécurisés null. Ils peuvent être décrits ainsi: , en plaçant la partie constante de l'expression à gauche de l'instruction conditionnelle )

if ("add".equalsIgnoreCase(called_from)) { // <-- safe if called_from is null
50
Elliott Frisch

C'est la ligne d'erreur:

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

Cela signifie que called_from est nul. Vérification simple si elle est nulle ci-dessus:

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

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

De cette façon, si called_from est nul, il exécutera la partie else de votre instruction if.

7
Alex K

L'exception se produit en raison de cette déclaration,

called_from.equalsIgnoreCase("add")

Il semble que la déclaration précédente

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

a renvoyé une référence nulle.

Vous pouvez vérifier si l'intention de démarrer cette activité contient une telle clé "appelée".

4
htredleaf