如果我不使用 .equals 方法,我怎么会收到此错误?[关闭]

How am I getting this error if I'm not using the .equals method? [closed]

提问人:Dylan 提问时间:12/23/2019 最后编辑:user1506104Dylan 更新时间:12/23/2019 访问量:96

问:


这个问题是由错别字或无法再现的问题引起的。虽然类似的问题可能在这里是主题,但这个问题的解决方式不太可能帮助未来的读者。

3年前关闭。

String signInMethod;
...

...
if (signInMethod != null) {
    if (signInMethod.equals("google")) {
        intent.putExtra("signInMethod", "google");
    } else if (signInMethod.equals("email")) {
        intent.putExtra("signInMethod", "email");
    }
} else {
    intent.putExtra("signInMethod", "alreadySignedIn");
}
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference

如果我不使用 .equals 方法,我怎么会收到此错误?

enter image description here

enter image description here

enter image description here

java android nullreferenceexception

评论

4赞 a_local_nobody 12/23/2019
请发布您的所有代码
1赞 Dylan 12/23/2019
以下是对 signInMethod 的唯一引用
1赞 Stultuske 12/23/2019
还要显示哪一行引发了异常。请注意,最好写成这样的等号: if ( “google”.equals(signInMethod) )
5赞 a_local_nobody 12/23/2019
@Stultuske为什么做起来更好?if( "google".equals(signInMethod) )
2赞 Stultuske 12/23/2019
@a_local_nobody,因为如果对 String 文本调用该方法,则无论是否添加 null 检查,它都会使语句无法引发 NPE。

答:

0赞 mehul chauhan 12/23/2019 #1

使用这个。

  String signInMethod = null;
    if(TextUtils.isEmpty(signInMethod)){
        Toast.makeText(context, "Some thing wrong please try again", Toast.LENGTH_SHORT).show();
    }else {
        if (signInMethod.equalsIgnoreCase("google")) {
            intent.putExtra("signInMethod", "google");
        } else if (signInMethod.equalsIgnoreCase("email")) {
            intent.putExtra("signInMethod", "email");
        } else {
            intent.putExtra("signInMethod", "alreadySignedIn");
        }
    }
0赞 user1506104 12/23/2019 #2

看起来像是局部变量的默认值有问题。确保至少使用 .signInMethodnull

public void myMethod() {
    String signInMethod = null; // <--- THE FIX
    ...

    ...
    if (signInMethod != null) {
        if (signInMethod.equals("google")) {
            intent.putExtra("signInMethod", "google"); 
        } else if (signInMethod.equals("email")) {
            intent.putExtra("signInMethod", "email");
        }
    } else {
        intent.putExtra("signInMethod", "alreadySignedIn");
    }
}
0赞 Shahzaib Official 12/23/2019 #3

Java Compiler 不会为局部变量赋值(甚至 null)。您必须将其初始化为“Null”才能使其工作,否则 IF 语句不起作用