2009-10-09 41 views
11

Tôi đang chạy dòng sau trong một hoạt động, đó là trong cùng một ứng dụng, nhưng trong một gói khác nhau:Android: this.getApplication() trả về con trỏ NULL

AppObject appObj = (AppObject)this.getApplication(); 
// FYI: AppObject is my extension class of Application. 

Nó chỉ trả về một con trỏ null , trong khi khi tôi di chuyển nó đến gói "chính" và chạy nó từ đó nó trả về tham chiếu ứng dụng như mong đợi.

tôi đã xác định hoạt động trong AndroidManifest.xml của tôi với tên lớp có trình độ đầy đủ, vì nó là trong một gói khác: <activity android:name="com.foo.bar.TestActivity"></activity>

Bất kỳ ý tưởng về những gì tôi đã làm khác nhau?

Cảm ơn


Cập nhật: Như đã đề cập trong một câu hỏi dưới đây android:name="AppObject" đã có trong thẻ <application> của AndroidManifest.xml

Trả lời

4

Bạn cần thẻ cập nhật ứng dụng để AndroidManifest.xml với bạn tên lớp, được mở rộng từ Ứng dụng, với tên gói thích hợp.

<application android:name=".AppObject"> 


Theo Application docs google thẻ, cơ sở lớp học dành cho những người cần phải duy trì trạng thái ứng dụng toàn cầu. Bạn có thể cung cấp việc triển khai của riêng bạn bằng cách chỉ định tên của nó trong thẻ AndroidManifest.xml của bạn, điều này sẽ khiến cho lớp đó được khởi tạo cho bạn khi quá trình cho ứng dụng/gói của bạn được tạo ra.

here

+1

Xin lỗi, tôi quên đề cập đến điều đó trong câu hỏi của mình. Nhưng tôi đã có nó trong Manifest của tôi. – znq

1

Chỉ cần chạy vào điều tương tự, sau khi refactored tất cả các mã của tôi vẫn có cùng một vấn đề, nhận thấy rằng tôi đã thiết lập các mApplication biến địa phương trong xây dựng, cần đi trong onCreate(), tôi nghĩ tất cả các đối tượng trong tệp kê khai có thể được tạo trước tiên trước khi getApplication() được thiết lập để bạn cần gọi số getApplication() trong hoặc sau onCreate() đã được gọi. Đã không refactored tất cả các mã của tôi trở lại một lần nữa để xem nếu điều này làm việc cho các gói khác nhau (thở dài).

20

Điều quan trọng là gọi getApllication() trong phương thức onCreate() của hoạt động, không phải trong hàm tạo.

+0

Điểm rất quan trọng, không được đề cập trong tài liệu. Cảm ơn rất nhiều! – Stan

+0

thú vị, getApplication gọi điện thoại này trước khi onCreate dường như làm việc cho một đồng nghiệp tốt trên một lưu ý thiên hà samsung 3, nhưng trên nexus của tôi 5 tôi thấy một vụ tai nạn. – Sam

+0

Cảm ơn bạn rất nhiều! Tôi đã ở trong trạng thái tuyệt vọng bởi vì tôi có NullPointerExceptions ở mọi cách tôi cố gắng để có được trên SharedPreferences. Điều này giải quyết nó cho tôi! Cảm ơn! –

-1

Tôi nghĩ, đó không phải là con trỏ null, nhưng chức năng mà bạn muốn sử dụng tiếp theo trong lớp AppObject có thể sai.

+0

Vui lòng giải thích. Tại sao bạn nghĩ vậy? – naXa

+0

Tôi gặp lỗi của bạn một lần, khi tôi kiểm tra mã và tìm lý do này, tôi mới tham gia lĩnh vực này và hy vọng điều này sẽ hữu ích cho bạn. – user3641050

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