2015-03-04 18 views
18

Tôi gặp sự cố lạ. Tôi có một ứng dụng mà tôi đã triển khai trên thiết bị Android 4.4 và sử dụng thư viện Otto. Tôi đã triển khai ứng dụng trên thiết bị Android 5.0. Nó vẫn làm việc. Tôi đã thử lại trên 4.4 và ứng dụng sẽ không khởi chạy.ClassNotFoundException: Không tìm thấy lớp "android.os.PersistableBundle" Otto Android 5.0

Rõ ràng, nó cố gắng sử dụng PersistableBundle.class mà một lớp API 21. Đây là nhật ký của tôi:

Caused by: java.lang.ClassNotFoundException: Didn't find class "android.os.PersistableBundle" on path: DexPathList[[zip file "/data/app/fr.myapp.apk"],nativeLibraryDirectories=[/data/app-lib/fr.myapp, /vendor/lib, /system/lib]] 
      at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
      at java.lang.ClassLoader.loadClass(ClassLoader.java:497) 
      at java.lang.ClassLoader.loadClass(ClassLoader.java:457) 
            at java.lang.Class.getDeclaredMethods(Native Method) 
            at java.lang.Class.getDeclaredMethods(Class.java:656) 
            at com.squareup.otto.AnnotatedHandlerFinder.loadAnnotatedMethods(AnnotatedHandlerFinder.java:52) 
            at com.squareup.otto.AnnotatedHandlerFinder.findAllProducers(AnnotatedHandlerFinder.java:126) 
            at com.squareup.otto.HandlerFinder$1.findAllProducers(HandlerFinder.java:33) 
            at com.squareup.otto.Bus.register(Bus.java:191) 
+0

Tôi không chắc chắn nếu bạn là người đã nhận xét về vấn đề này, nhưng có [vấn đề nổi bật về vấn đề này] (https://github.com/square/otto/issues/139). – CommonsWare

+0

Đúng là tôi. Tôi vừa tìm ra giải pháp bên dưới. – Cocorico

+0

cập nhật hệ điều hành Android lên 5.0 đã giải quyết được sự cố cho tôi –

Trả lời

28

Tôi tìm thấy "giải pháp". Chỉ cần loại bỏ chức năng này từ hoạt động của bạn:

@Override 
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { 
    super.onSaveInstanceState(outState, outPersistentState); 
} 
+0

Xóa khỏi sự cố? – CommonsWare

+0

Tôi đã chỉnh sửa câu trả lời của mình. Hy vọng nó giúp – Cocorico

+4

Hmmm ... trong khi đó có thể hoạt động, đó thực sự là một cách giải quyết nhiều hơn một "giải pháp". Nhà phát triển có thể muốn sử dụng phương pháp đó trên thiết bị Android 5.0 trở lên. Việc ghi đè phương thức mà cấp API cũ hơn không gọi bình thường không phải là vấn đề. Otto, vì nó đang lặp qua các phương thức, nên có xử lý ngoại lệ tại chỗ để đối phó với kịch bản này, IMHO. – CommonsWare

0

Thay đổi targetVersion lên phiên bản API của thiết bị bạn đang chạy.

Tôi có targetVersion = 21 khi thiết bị của tôi có 4.4 (API 19), thay đổi giá trị thành 19 giải quyết vấn đề.

0

Tôi đã gặp sự cố tương tự trên điện thoại Samsung Galaxy 3mini và điện thoại nhà điều hành cục bộ. Nhưng tôi đã khắc phục bằng phương pháp ghi đè hoạt động.i hy vọng nó hoạt động cho bạn.

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    try { 
     BusApplication.getInstance().register(this); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
Các vấn đề liên quan