我有一个奇怪的问题。 我有一个应用程序,我部署在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)
答案 0 :(得分:28)
我找到了“解决方案”。 只需从您的活动中删除此功能:
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
}
答案 1 :(得分:0)
将 targetVersion 更改为您正在运行的设备的API版本。
当我的设备有4.4(API 19)时,我有 targetVersion = 21 ,将值更改为19解决了问题。
答案 2 :(得分:0)
我在三星Galaxy 3mini和本地操作员手机上遇到了同样的问题。但是我用覆盖活动方法修复了。我希望它适合你。
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
try {
BusApplication.getInstance().register(this);
} catch (Exception e) {
e.printStackTrace();
}
}
答案 3 :(得分:0)
基于FAG
某些Android版本在调用getDeclaredMethods或getMethods时似乎存在反射错误
在这种情况下,PersistableBundle
是在API级别21中添加的,当我们在生命周期方法(例如 onCreate 或 onSaveInstanceState )中使用它时,就会发生此错误。
如果您在代码中使用了 以下任何一种方法
@Override
public void onCreate(Bundle savedInstanceState,PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
}
@Override
public void onPostCreate(Bundle savedInstanceState,PersistableBundle persistentState) {
super.onPostCreate(savedInstanceState, persistentState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onRestoreInstanceState(savedInstanceState, persistentState);
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
}
请改用以下方法(如果无用,请删除上述方法)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
就我而言,我在baseActivity中使用了此方法,并导致崩溃
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
}
我只是将其替换为
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
问题解决了。