NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equalsIgnoreCase(java.lang.String)' on a null object reference
本问题已经有最佳答案,请猛点这里访问。
我在运行时收到此错误。
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
堆栈跟踪:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 |
下面我发布了代码并指出了错误行。
Add_Update_User.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | @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(); } } |
1 | if (called_from != null && called_from.equalsIgnoreCase("add")) { |
或者您可以使用Yoda条件(根据链接的维基百科文章中的优点,它也可以解决某些类型的不安全的
1 | if ("add".equalsIgnoreCase(called_from)) { // <-- safe if called_from is null |
这是错误行:
1 | if (called_from.equalsIgnoreCase("add")) { --->38th error line |
这意味着
1 2 3 4 5 6 7 8 9 10 | String called_from = getIntent().getStringExtra("called"); if(called_from == null) { called_from ="empty string"; } if (called_from.equalsIgnoreCase("add")) { // do whatever } else { // do whatever } |
这样,如果
由于此声明而发生异常,
1 | called_from.equalsIgnoreCase("add") |
这似乎是之前的声明
1 |
返回一个空引用。
您可以检查启动此活动的意图是否包含"已调用"键。