NullPointerException:尝试在空对象引用上调用虚拟方法“boolean java.lang.String.equalsIgnoreCase(java.lang.String)”
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27895108/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equalsIgnoreCase(java.lang.String)' on a null object reference
提问by Steve
I am getting this error at runtime.
我在运行时收到此错误。
java.lang.RuntimeException: Unable to start activity ComponentInfo java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equalsIgnoreCase(java.lang.String)' on a null object reference
java.lang.RuntimeException: 无法启动活动 ComponentInfo java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法 'boolean java.lang.String.equalsIgnoreCase(java.lang.String)'
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.access0(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
Below I am posted the codes and pointed out the error line.
下面我发布了代码并指出了错误行。
Add_Update_User.java:
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();
}
}
采纳答案by Elliott Frisch
called_from
must be null
. Add a test against that condition like
called_from
必须是null
。添加针对该条件的测试,例如
if (called_from != null && called_from.equalsIgnoreCase("add")) {
or you could use Yoda conditions(per the Advantagesin the linked Wikipedia article it can also solve some types of unsafe null
behaviorthey can be described as placing the constant portion of the expression on the left side of the conditional statement)
或者您可以使用Yoda 条件(根据链接的维基百科文章中的优势,它还可以解决某些类型的不安全null
行为,它们可以被描述为将表达式的常量部分放在条件语句的左侧)
if ("add".equalsIgnoreCase(called_from)) { // <-- safe if called_from is null
回答by Alex K
This is the error line:
这是错误行:
if (called_from.equalsIgnoreCase("add")) { --->38th error line
This means that called_from
is null. Simple check if it is null above:
这意味着它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
}
That way, if called_from
is null, it'll execute the else
part of your if statement.
这样,如果called_from
为空,它将执行else
if 语句的一部分。
回答by htredleaf
The exception occurs due to this statement,
由于此语句而发生异常,
called_from.equalsIgnoreCase("add")
It seem that the previous statement
好像之前的说法
String called_from = getIntent().getStringExtra("called");
returned a null reference.
返回一个空引用。
You can check whether the intent to start this activity contains such a key "called".
您可以检查启动此活动的意图是否包含这样一个“被调用”的键。