欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 出现:java.lang.NoClassDefFoundError...错误解决办法

程序员文章站 2023-11-30 17:33:22
今天测试突然给我说我写的xx界面一点app就crash了! 纳尼,我肯定表示不服啊!怎么可能出现一点击就崩溃的情况呢,明明自己的测试了的! 然后我又用自己的测试机试了下...

今天测试突然给我说我写的xx界面一点app就crash了!

纳尼,我肯定表示不服啊!怎么可能出现一点击就崩溃的情况呢,明明自己的测试了的!

然后我又用自己的测试机试了下没问题(version:5.0.2),然后又使用crash的测试手机(version:4.4),乖乖,居然是4.4才会出现的情况!(4.4以下没有验证哈!可能都会吧!!!)

log显示:

 w/system.err: java.lang.noclassdeffounderror: android/os/persistablebundle
 w/system.err:   at java.lang.class.getdeclaredmethods(native method)
 w/system.err:   at java.lang.class.getdeclaredmethods(class.java:656)
 w/system.err:   at de.greenrobot.event.subscribermethodfinder.findsubscribermethods(subscribermethodfinder.java:75)
 w/system.err:   at de.greenrobot.event.eventbus.register(eventbus.java:163)
 w/system.err:   at de.greenrobot.event.eventbus.register(eventbus.java:133)

接着当然就是google 了!

*

最终找到了出现这个error的原因:

 @override
public void oncreate(bundle savedinstancestate, persistablebundle persistentstate) {
  super.oncreate(savedinstancestate, persistentstate);
}
@override
public void onsaveinstancestate(bundle outstate, persistablebundle outpersistentstate) {
  super.onsaveinstancestate(outstate, outpersistentstate);
}
@override
protected void oncreate(bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
}

@override
protected void onsaveinstancestate(bundle outstate) {
  super.onsaveinstancestate(outstate);
}

注意在写activity的时候,如果使用了public 两个bundle参数的方法,那么在4.4的机器上就会出现crash的情况!

至于为撒就还没有去细究,本质上,两个参数的其实还是走的一个参数的方法。。

public void oncreate(@nullable bundle savedinstancestate,
    @nullable persistablebundle persistentstate) {
  oncreate(savedinstancestate);
}

所以在写这些回调的时候不要马虎大意了,记得是复写protected开头的!!!