実行時にこのエラーが発生します。
Java.lang.RuntimeException:アクティビティComponentInfoを開始できないJava.lang.NullPointerException:nullオブジェクト参照で仮想メソッド '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.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:
@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();
}
}
called_from
はnull
でなければなりません。そのような条件に対するテストを追加します
if (called_from != null && called_from.equalsIgnoreCase("add")) {
または、リンクされたウィキペディアの記事で (Yoda条件 (Advantagesごとに)を使用することもできますいくつかのタイプの安全でないnull
動作を解決します条件ステートメントの左側に式の定数部分を配置する)と記述することができます
if ("add".equalsIgnoreCase(called_from)) { // <-- safe if called_from is null
これはエラー行です:
if (called_from.equalsIgnoreCase("add")) { --->38th error line
これは、called_from
がヌルであることを意味します。上記のnullかどうかの簡単なチェック:
String called_from = getIntent().getStringExtra("called");
if(called_from == null) {
called_from = "empty string";
}
if (called_from.equalsIgnoreCase("add")) {
// do whatever
} else {
// do whatever
}
そのようにして、called_from
がnullの場合、ifステートメントのelse
部分を実行します。
このステートメントが原因で例外が発生しますが、
called_from.equalsIgnoreCase("add")
前の声明のようです
String called_from = getIntent().getStringExtra("called");
null参照を返しました。
このアクティビティを開始する意図に、このような「呼び出される」キーが含まれているかどうかを確認できます。