Android 解决java.lang.IndexOutOfBoundsException: Inconsistency detected错误

这里写图片描述

  今天测试突然找我说项目在刷新数据时偶现crash情况,经过反复测试终于重现出此错误日志,如图所示,看到此错误信息我当时也是一脸懵逼,没有报具体哪段代码的错误信息,而是报RecyclerView内部错误,于是经过google一番终于找到此错误原因,在此记录下解决方法:
  

1、创建一个继承LinearLayoutManager的类,重写onLayoutChildren方法,捕获异常,使项目不会crash掉:

public class WrapContentLinearLayoutManager extends LinearLayoutManager {
    //... constructor
    @Override
    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
        try {
            super.onLayoutChildren(recycler, state);
        } catch (IndexOutOfBoundsException e) {
            Log.e("probe", "meet a IOOBE in RecyclerView");
        }
    }
}

2、采用notifyItemRangeRemoved + notifyItemRangeInserted方式:

int oldContentSize = itemsBeanList.size();//获取刷新前数据长度
itemsBeanList.clear();
adapter.notifyItemRangeRemoved(0,oldContentSize );
itemsBeanList.addAll(newContentList);//添加新数据
//下拉刷新时oldContentSize为0,上拉加载时为之前数据长度
adapter.notifyItemRangeInserted(oldContentSize,newContentList.size());

总结
  
  经自己测试,上面两个方法都是有效的,这个错误原因应该是adapter中数据集不一致而导致的,只需要解决外部数据集和内部数据集保持同步更新即可。有关notifyItemRangeRemoved 和notifyItemRangeInserted的含义,这里就不多说了,想了解的可以去API文档中阅读,多读读文档对自己很有帮助的。哈哈!

参考文献:https://stackoverflow.com/questions/31759171/recyclerview-and-java-lang-indexoutofboundsexception-inconsistency-detected-in

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值