2015-01-12 17 views
12

Tôi nhận được lỗi này khi chạy.NullPointerException: Cố gắng gọi phương thức ảo 'boolean java.lang.String.equalsIgnoreCase (java.lang.String)' trên tham chiếu đối tượng null

java.lang.RuntimeException: Không thể bắt đầu hoạt động ComponentInfo java.lang.NullPointerException: Cố gắng để gọi phương thức ảo 'boolean java.lang.String.equalsIgnoreCase (java.lang.String)' trên tài liệu tham khảo đối tượng 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 

Dưới đây tôi đăng các mã số và poi nted ra dòng lỗi.

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(); 
    } 
    } 
+2

bạn có thể thử điều này cho tôi không? nếu ("thêm" .equalsIgnoreCase (gọi là_from)) { –

+0

@KickButtowski Tôi đã thử yours.works fine.can bạn đăng câu trả lời của bạn và giải thích nó? – Steve

+0

Tôi không thể đăng câu trả lời của mình vì bài đăng của bạn đã được đánh dấu là trùng lặp. :( –

Trả lời

35

called_from phải là null. Thêm một thử nghiệm chống lại tình trạng đó như

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

hoặc bạn có thể sử dụng Yoda conditions (theo Ưu trong bài viết Wikipedia liên kết nó cũng có thể giải quyết một số loại không an toàn null hành vi họ có thể được mô tả như đặt phần liên tục của sự biểu hiện ở phía bên trái của bản tuyên bố có điều kiện)

if ("add".equalsIgnoreCase(called_from)) { // <-- safe if called_from is null 
+13

Tôi yêu điều kiện Yoda ... + 1 cho ý tưởng đó! –

+0

bạn có thể giải thích điều kiện Yoda tại đây không? –

+0

@KickButtowski Đã chỉnh sửa để bao gồm một số giải thích. –

5

Đây là dòng lỗi:

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

Điều này có nghĩa rằng called_from là null. Đơn giản kiểm tra nếu nó là null trên:

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

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

Bằng cách đó, nếu called_from là null, nó sẽ thực hiện else một phần của câu lệnh if của bạn.

4

Trường hợp ngoại lệ xảy ra do tuyên bố này,

called_from.equalsIgnoreCase("add") 

Nó dường như rằng tuyên bố trước

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

trở một tham chiếu null.

Bạn có thể kiểm tra xem ý định bắt đầu hoạt động này có chứa khóa "được gọi" hay không.

Các vấn đề liên quan

 Các vấn đề liên quan