异常

匿名 (未验证) 提交于 2019-12-02 23:45:01

一、JDK版本兼容问题

java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor version 52.0
某些东西包或类需要更高的JDK版本
buildToolsVersion '24.0.0' 需要JDK 1.8

二、布局填充异常

2.构造函数问题:自定义一个View,必须派生实现基类View的三个构造函数

3.编译的中间文件没有清理干净:第三种就是你在原生系统代码的编译环境下编译APK之后,特别是修改了XML
4.找不到资源文件:我原来在2.3的原生系统增加动态壁纸的时候,动态壁纸一跑起来就出这个异常,然后crash,当时就是因为找不到drawable的资源文件,于是当时我把drawable的hdpi或nodpi等文件夹的图片资源都拷贝一份到drawble下,问题解决(


三、Activity的onCreate()方法(不同API,注意参数问题)

 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)
然后我又用自己的测试机试了下没问题(Version:5.0.2),然后又使用crash的测试手机(Version:4.4),乖乖,居然是4.4才会出现的情况!
 @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开头的!!!


四、RecycleView滑动的时候,程序崩掉

@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
 
     //checkbox view listener
    viewHolder.getCheckbox().setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
 
            //update list items
            notifyDataSetChanged();
        }
    });
}
程序会报以下错误

这个异常出现在在onBindViewHolder方法里调用notifyDataSetChanged刷新的时候。
解决方法:

stackoverflow里也给出了解释:

onBindViewHolder方法不是用来初始化viewholder的,这个方法是用来刷新每一个recycler item的。所以在onBindViewHolder里的某些组件里的事件方法做notifyDataSetChanged,onBindViewHolder就会频繁执行

解决方法很简单,就是将这些事件方法从onBindViewHolder分离出来。具体代码,stackoverflow

1、在ViewHolder中setOnCheckChangeListener(this);

private boolean onBind;
 
public ViewHolder(View itemView) {
    super(itemView);
    mCheckBox = (CheckBox) itemView.findViewById(R.id.checkboxId);
    mCheckBox.setOnCheckChangeListener(this);
}
 
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if(!onBind) {
        // your process when checkBox changed
        // ...
 
        notifyDataSetChanged();
    }
}
 
...
 
@Override
public void onBindViewHolder(YourAdapter.ViewHolder viewHolder, int position) {
    // process other views 
    // ...
 
    onBind = true;
    viewHolder.mCheckBox.setChecked(trueOrFalse);
    onBind = false;
}
2、当然,用setOnClickListener()也可以。

五、Jar包包含同样的文件

android {    compileSdkVersion 23    buildToolsVersion '23.0.2'    packagingOptions {        exclude 'META-INF/NOTICE'        exclude 'META-INF/LICENSE'    }


六、使用Toolbar报错

1、Error inflating android.support.v7.widget.Toolbar

在开发中,一直没怎么关注各种support包的具体版本号,在此次的版本中,我们使用了

<wiz_code_mirror>
compile 'com.android.support:appcompat-v7:23.2.0'

结果就在某些(绝大多数)机型上都无法运行,而且报以上两个错误,可用

compile 'com.android.support:appcompat-v7:23.4.0'
 

七、内存资源泄露

八、Butter Knife查找不存在的id

导致unable to bind views for activity
例如:在使用Navigation
 

九、导入项目报错

 
 
十、setText()设置了int类型
 
十、动态添加控件不能多次添加
 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!