2013-04-16 23 views
9

Tôi có một lớp mở rộng lớp ứng dụng và đôi khi trong giao diện điều khiển phát triển của tôi, tôi thấy một lỗi nói ClassNotFoundExceptionLớp mở rộng Application ném ClassNotFoundException

java.lang.RuntimeException: Unable to instantiate application ecm2.android.ActiveStore: java.lang.ClassNotFoundException: ecm2.android.ActiveStore 
at android.app.LoadedApk.makeApplication(LoadedApk.java:501) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4221) 
at android.app.ActivityThread.access$1400(ActivityThread.java:139) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4918) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.ClassNotFoundException: ecm2.android.ActiveStore 
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
at android.app.Instrumentation.newApplication(Instrumentation.java:982) 
at android.app.LoadedApk.makeApplication(LoadedApk.java:496) 
... 11 more 

Đây là cách tôi tuyên bố nó trong tôi manifest

<application 
    android:name=".ActiveStore" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.NoTitleBar" > 

ActiveStore chỉ là một lớp chứa ngữ cảnh ứng dụng để bắt đầu và hủy bỏ các alram, vậy tại sao tôi lại gặp lỗi này?

Cập nhật:

tôi vẫn còn nhìn thấy lỗi này bất cứ lúc nào trong trang phát triển của tôi ngay cả sau khi đặt một trước mặt . của tên lớp. Nó dường như chỉ xảy ra trên một bản cập nhật hoặc cài đặt mới

+0

@blackbelt có nó nằm trong thư mục gốc/mặc định của tôi – tyczj

+1

kiểm tra giải thích của tôi tại đây http://stackoverflow.com/questions/17253178/android-cant-find-class-even-though---eclecl-in- manifest/17253947 # 17253947 và cũng kiểm tra các vấn đề được hỏi tại đây. –

+0

lớp ứng dụng có trong dự án thư viện không? – user1140237

Trả lời

4

Có lẽ bởi vì bạn đang thiếu dấu chấm ở phía trước của tên lớp (mà giúp cho Dalvik rằng lớp học của bạn thuộc về gói ứng dụng của bạn)

.ActiveStore 

Nhưng nếu nghi ngờ, hãy đăng cả tệp kê khai toàn bộ và .java

0

Tôi cũng thấy vấn đề này rất nhiều và không có lời giải thích. Tôi đã thấy mọi người nói rằng nó có thể xảy ra SAU KHI một vụ tai nạn. Giả sử, sau một vụ tai nạn, ClassLoader có thể ở trạng thái "xấu" và không thể tải các lớp. Về cơ bản, điều này có nghĩa là một lỗi trước là nguồn thực sự của vấn đề này. Xin lỗi vì mơ hồ, vui lòng cập nhật nếu bạn tìm thấy giải thích chính xác hơn.

0

Nếu bạn có mã cần chạy khi khởi động (ví dụ: BroadcastReceiver trên BOOT_COMPLETED hoặc AppWidget), bạn có thể nhận được điều này nếu người dùng đã cài đặt ứng dụng của bạn trên thẻ SD bên ngoài. Tại thời điểm này thẻ SD có thể chưa được gắn kết, do đó lớp Ứng dụng của bạn không thể tải được. Bạn có thể giải quyết vấn đề này bằng cách đặt chế độ cài đặt thành internalOnly hoặc trong trường hợp của BroadcastReceiver để chờ phát sóng ACTION_MEDIA_MOUNTED. Xem android intent for sdcard ready

+0

Tôi không sử dụng BOOT_COMPLETED hoặc có một App Widget – tyczj

+0

Đó chỉ là một số ví dụ về những gì có thể gây ra điều này. Nó cũng có thể xảy ra nếu họ tháo thẻ SD. – keyboardr

0

Bạn đã thử sử dụng tên gói đủ điều kiện để tham chiếu lớp học trong tệp kê khai của mình chưa?

.ActiveStore 

sẽ trở thành

com.myapp.package.ActiveStore 

Bằng bất kỳ cơ hội bạn đang sử dụng ProGuard hoặc bất cứ điều gì tương tự như xáo trộn mã của bạn?

+0

vâng tôi đã làm điều đó – tyczj

+0

Tên gói đủ điều kiện không được chứa dấu chấm ở đầu – Gomino

+0

@gomino đúng. Sai lầm của tôi –

0

Tôi đã trải nghiệm điều này trước khi tôi mở rộng hoặc triển khai một trong các lớp/giao diện không có sẵn ở cấp api cụ thể. Nó không nói điều này một cách thích hợp.

+0

Cũng đi cho khởi tạo tĩnh vv – nickmartens1980

1

Trong biểu hiện của bạn, bạn nên hoặc là có cái gì đó như:

package="path.to.project.root" 
... 
<application 
    android:name=".MyApplication" 

hoặc như đã được đề cập đã

<application 
    android:name="path.to.project.root.MyApplication" 

Ngoài ra hãy chắc chắn rằng các nhà xây dựng của lớp MyApplication của bạn là công khai.

0

Tôi đã thấy điều này khi có xác minh lỗi cho một lớp khác nhau mà lớp học được đề cập phụ thuộc vào. Cuộn lùi lại và xem có bất kỳ lỗi xác minh nào trong đầu ra đầy đủ của logcat hay không.

Nếu ecm2.android.ActiveStore phụ thuộc vào một lớp không xác minh, thì bạn sẽ nhận được một lớp không tìm thấy cho ecm2.android.ActiveStore, không phải cho lớp ecm2.android.ActiveStore phụ thuộc vào.