ClassNotFoundException:没有找到类"android.os.PersistableBundle"Otto Android 5.0

Coc*_*ico 20 android classnotfoundexception otto android-5.0-lollipop

我有一个奇怪的问题.我有一个应用程序,我部署在Android 4.4设备上并使用Otto库.我在Android 5.0设备上部署了该应用程序.它仍然有效.我重新尝试了4.4,该应用程序将无法启动.

显然,它试图使用API​​ 21类的PersistableBundle.class.在这里我的日志:

    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)
Run Code Online (Sandbox Code Playgroud)

Coc*_*ico 28

我找到了"解决方案".只需从您的活动中删除此功能:

@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
    super.onSaveInstanceState(outState, outPersistentState);
}
Run Code Online (Sandbox Code Playgroud)

  • 只需使用public void`onSaveInstanceState(Bundle outState)`not`onSaveInstanceState(Bundle outState,PersistableBundle outPersistentState)` (11认同)
  • 嗯......虽然这可能有效,但这确实是一种解决方法而不是"解决方案".开发人员可能希望在Android 5.0及更高版本的设备上使用该方法.覆盖较旧的API级别未正常调用的方法不是问题.哎呀,因为它正在迭代方法,应该有异常处理来处理这种情况,恕我直言. (4认同)