2010-10-16 45 views
8

Ai đó có thể giải thích cho tôi tại sao trình xử lý "Catch" của Android sẽ không khởi tạo đối tượng Ngoại lệ? Khi một lỗi xảy ra và mã của tôi đang cố gắng khởi tạo một đối tượng ngoại lệ, nó là ALWAYS NULL.Ngoại lệ là NULL luôn

Điều trên không có ý nghĩa với tôi vì ngoại lệ phải luôn khởi tạo khoảng thời gian đối tượng Ngoại lệ. Nó sẽ không bao giờ là null nếu một lỗi xảy ra.

Tôi khá mới với IDE/SDK Android của Eclipse và tôi chắc chắn rằng tôi không có mọi thứ thiết lập 100%. Tuy nhiên, loại chức năng này sẽ có vẻ với tôi rằng nó sẽ làm việc tất cả các thời gian, không phải sau khi được thiết lập.

+1

Bạn có thể hiển thị phần có liên quan của mã không? Bạn đã sử dụng bằng chứng nào để đi đến kết luận rằng ngoại lệ là null? Bạn đã quan sát bằng chứng này như thế nào? –

+0

Xin chào, tôi có thiết lập trình xử lý bên dưới: bắt (Ngoại lệ cũ) { \t System.out.println ("LRI: \ n \ n" + ex.toString()); } Khi tôi chạy gỡ lỗi, ngoại lệ luôn là NULL .... bất kể lỗi là gì. Nó không bao giờ khởi tạo – John

+0

Bạn có một điểm ngắt trong khối catch, và ex là null? Tôi thấy khó tin ... Nếu ví dụ cũ là không, câu lệnh in của bạn sẽ ném một ngoại lệ con trỏ null, đó là điều gì sẽ xảy ra? –

Trả lời

6

Một nguyên nhân có thể là bạn đang cố gắng để tạo ra một kết nối mạng trên chủ đề chính của bạn, mà hoạt động tốt trước 2.3.3/Honeycomb (SDK mức < 10 chẳng hạn) nhưng sẽ được ném như một

android.os.NetworkOnMainThreadException

kể từ mức SDK 10

Kiểm tra này: http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

vấn đề là Eclipse không thực sự biết về ngoại lệ này (vì nó là điều kiện ném dựa trên mức độ SDK khác nhau vì vậy Eclipse lẽ không thể có được một trường hợp chính xác của ngoại lệ này, giải thích tại sao đối tượng ngoại lệ của bạn luôn là NULL)

Giải pháp: tạo một chuỗi riêng biệt hoặc sử dụng AsyncTask để thực hiện yêu cầu kết nối mạng của bạn.

+0

Làm thế nào để có thể gọi trình xử lý ngoại lệ mà không có trường hợp ngoại lệ? Mã xử lý ngoại lệ phải kiểm tra một cách hiệu quả 'instance throwException của CatchException', và không có một cá thể của ngoại lệ sẽ thất bại. –

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