2013-09-03 37 views
18

tôi sau this tutorial và nhận được một NullPointerException tại phương pháp onCreate của DisplayMessageActivity tại khối mã này:getActionBar(). SetDisplayHomeAsUpEnabled (true); ném NullPointerException trên tạo ra hoạt động mới (Google - Basic Tutorial)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
// Show the Up button in the action bar. 
getActionBar().setDisplayHomeAsUpEnabled(true); //Exception here 
} 

Tôi đang chạy ứng dụng tại một giả lập theo mẫu NexusOne AVD.
Khi tôi nhấp vào nút gửi với một số văn bản được nhập vào, tôi có ngoại lệ.

Đây là nhật ký:

09-03 23:02:07.586: E/AndroidRuntime(7095): FATAL EXCEPTION: main 
09-03 23:02:07.586: E/AndroidRuntime(7095): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mypackage.myfirstapp/com.mypackage.myfirstapp.DisplayMessageActivity}: java.lang.NullPointerException 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at android.os.Looper.loop(Looper.java:137) 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at java.lang.reflect.Method.invoke(Method.java:511) 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at dalvik.system.NativeStart.main(Native Method) 
09-03 23:02:07.586: E/AndroidRuntime(7095): Caused by: java.lang.NullPointerException 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at com.mypackage.myfirstapp.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:40) 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at android.app.Activity.performCreate(Activity.java:5104) 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
09-03 23:02:07.586: E/AndroidRuntime(7095):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
09-03 23:02:07.586: E/AndroidRuntime(7095):  ... 11 more 

By bình luận khối này ứng dụng chạy successfuly.

Tại sao một NullPointerException bị ném?

+8

Điều này có nghĩa là thanh tác vụ không tồn tại. Xem liệu chủ đề của bạn được đề cập trong tệp kê khai có hỗ trợ thanh tác vụ hay không. –

Trả lời

10

Tôi gặp vấn đề tương tự.

Trong hoạt động của manifest tôi đã tuyên bố

android:theme="@android:style/Theme.Black.NoTitleBar 

mà gây ra lỗi. Sau khi loại bỏ dòng này, thanh tác vụ của tôi hoạt động tốt.

4

Nó không phải là cần thiết nhưng có một số mâu thuẫn hành vi giữa các phiên bản API ngay cả sau khi mức API 14.

Hành vi:

Back "<" hình ảnh được hiển thị nhưng nó không hoạt động khi ép . Là phương pháp hay, tôi sử dụng để triển khai trường hợp chuyển đổi để xử lý sự kiện trở lại.

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    // Respond to the action bar's Up/Home button 
    case android.R.id.home: 
     NavUtils.navigateUpFromSameTask(this); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

Nó làm việc cho tôi.

28

Có thể bạn đang sử dụng Chủ đề không hỗ trợ ActionBar. Do đó, phương pháp getActionBar() sẽ ném NullPointerException.

Cố gắng sử dụng chủ đề này:

android:theme="@android:style/Theme.Holo.Light" 
24

Hãy thử thay đổi getActionBar()-getSupportActionBar() hoặc ((ActionBarActivity)getActivity()).getSupportActionBar().

+9

Bất kỳ lời giải thích nào về _why_ này giải quyết được vấn đề sẽ cải thiện câu trả lời của bạn. – ryanyuyu

+0

Tôi cũng gặp vấn đề này gần đây và giải quyết nó bằng cách thực hiện việc này. – ewige

+1

Thay đổi nhập android.app.ActionBar; để nhập android.support.v7.app.ActionBarActivity; – user1501382

1

Tôi gặp lỗi này khi tôi đang thử ứng dụng mẫu ngăn điều hướng có sẵn tại trang web dành cho nhà phát triển Android. Hóa ra, MainActivity không mở rộng ActionBarActivity và do đó getActionBar() trả về null gây ra ngoại lệ.

0

Không có câu trả lời nào khác phù hợp với tôi. Tôi chỉ nhận xét rằng toàn bộ if và nó hoạt động. Từ tên phương thức (and documentation), bạn không cần chức năng đó (trừ khi bạn muốn), vì vậy không có hại gì được thực hiện.

liên quan trích đoạn tài liệu:

Set dù nhà sẽ được hiển thị như một "lên" affordance.Đặt điều này thành true nếu chọn "nhà riêng" trả về bằng một cấp trong giao diện người dùng của bạn thay vì quay lại cấp cao nhất hoặc trang đầu.

Để đặt nhiều tùy chọn hiển thị cùng một lúc, hãy xem phương thức setDisplayOptions .

thông số

showHomeAsUp đúng để hiển thị cho người dùng biết chọn nhà sẽ trở lại lên mức trên chứ không phải đến cấp cao nhất của ứng dụng.

0

Bạn phải đặt một số chủ đề với Hoạt động không tương thích với thanh Hành động.

Vì vậy, chỉ kiểm tra các chủ đề bạn đang sử dụng với trong file manifest của bạn và loại bỏ nó

hoặc nếu bạn đã xác định tùy chỉnh theme đi res-> values-> phong cách của bạn. xml và tạo WindowActionBar thành true.