最近在又一次遇到RecyclerView的Inconsistency detected报错后,研究了一下,终于清楚了问题所在,以及解决办法。

报错模拟:

先看一下报错日志

能看到最先的报错是IndexOutOfBoundsException,然后在网上搜索Inconsistency detected后,了解到这个问题原因是因为RecyclerView的Adapter内外部数据集不一致所出现的报错。

这是什么意思呢?

比如我在Activity中把外部数据集List datas赋值给Adapter,这样RecyclerView中也会有一个内部数据集来保存数据。

在更新第一页数据时,一般我们会选择去清空整个外部的数据集,向服务器发送请求,等从服务器获取到新的数据再重新赋值给外部数据集datas,此时再notifyDataSetChanged(),将数据同步到内部数据集datas中。

就是这个时间差,当我们在等待从服务器获取最新数据时,此时外部数据集已经被清空,如果去滑动RecyclerView就会报错了。

RecyclerView中报错代码如下:

final int offsetPosition = mAdapterHelper.findPositionOffset(position);
if (offsetPosition < 0 || offsetPosition >= mAdapter.getItemCount()) {throw new IndexOutOfBoundsException("Inconsistency detected. Invalid item "+ "position " + position + "(offset:" + offsetPosition + ")."+ "state:" + mState.getItemCount() + exceptionLabel());
}

逻辑报错代码:

void refreshData(){//如果是下拉刷新,清理外部数据集datas.clear();//向服务器发送请求,获取数据sendRequest();
}

服务器返回数据后在updataView()中更新:

void updateView(){mAdapter.notifyDataSetChanged();   //报错Inconsistency detected
}

所以解决办法就清楚了,在对外部数据集进行操作的时候,一定要使用notifyDataSetChanged()等刷新方法来更新内部数据集合,保证内外部数据同步,这样就不会报错了。

正确的代码:

void refreshData(){//下拉刷新,向服务器发送请求,获取数据sendRequest();
}

服务器返回数据后在updataView()中更新:

    void updateView() {if (sort = FIRST_PAGE) {    //首页刷新数据datas.clear();}mAdapter.notifyDataSetChanged();    //报错Inconsistency detected}

如果对你有帮助的话,点赞、评论都是对我的鼓励,也是支持我写下去的动力,谢谢!

RecyclerView的Inconsistency detected报错解决办法相关推荐

  1. 连接远程服务器CredSSP加密Oracle修正报错解决办法

    连接远程服务器CredSSP加密Oracle修正报错解决办法: 打开注册表,快捷输入 "regedit"(类似找命令提示符 输入 cmd 一样)找文件夹 路径:HKLM(缩写)\S ...

  2. please reinstall the mysql distribution_php安装扩展mysqli的实现步骤及报错解决办法

    php安装扩展mysqli的实现步骤及报错解决办法 terminal#cd php-5.3.6/ext/mysqli #/usr/local/webserver/php/bin/phpize #./c ...

  3. Could not resolve host: 'localhost 报错解决办法

    Could not resolve host: 'localhost 报错解决办法 面向Windows的: 零基础的我一直卡在这一步骤下: 首先要先在Windows安装curl:安装方式参考:http ...

  4. php mysqli报错,php安装扩展mysqli的实现步骤及报错解决办法

    php安装扩展mysqli的实现步骤及报错解决办法 terminal #cd php-5.3.6/ext/mysqli #/usr/local/webserver/php/bin/phpize #./ ...

  5. 浏览器DNS_PROBE_FINISHED_NXDOMAIN报错解决办法

    方法1: 更改DNS地址 114.114.114.114 Preferred DNS Server: 8.8.8.8 Alternate DNS Server: 8.8.4.4 方法2: 浏览器浏览网 ...

  6. vmware虚拟机删除光驱启动报错解决办法

    vmware虚拟机删除光驱启动报错解决办法 将vmware虚拟机光驱给删除了,启动就一直报这个错,具体如下: IDE 设备(磁盘/CD-ROM)配置不正确."ide1:1"上具有一 ...

  7. LaTeX报错解决办法:arithmetic: number too big ! Dimension too large.

    LaTeX报错解决办法:arithmetic: number too big ! Dimension too large. 试了一些网上搜到的办法: 用画图软件.PS之类的修改另存jpg或者png: ...

  8. 【matlab】【Datcom】气动解算软件win10报错解决办法及运行交互示例

    版本说明 免费版本仍然可用.尚未使用Datcom + Pro版本的功能进行更新.没有大量的工作,我无法生成新的分发程序包,并且我现在对此不感兴趣.建议您观看教程视频,以了解使用新的Datcom + P ...

  9. M1 pod install CocoaPod 报错解决办法

    Mac M1 pod install 报错解决办法 Mac M1 CocoaPods 环境问题 M1 Ruby 环境问题 新到的 MacBook Pro M1,配置如下: MacBook Pro (1 ...

最新文章

  1. android studio 去掉标题栏的简单方法
  2. AJAX跨域访问解决方案
  3. More than Moore的探索
  4. Android10.0 Binder通信原理(二)-Binder入门篇
  5. 基本类型和操作之富包装器
  6. 坐标上升算法(Coordinate Ascent)及C++编程实现
  7. php pdo 查询语句,PDO:预处理语句(参数化查询)
  8. 成像数据更好的展示_为什么更多的数据并不总是更好
  9. js中的日期控件My97 DatePicker
  10. 如何实现DataGridView刷新数据?
  11. php手机注册和微信登录统一,微信第三方登录账户统一的问题
  12. LoadRunner性能测试技术培训
  13. 剑指Offer之整数中1出现的次数(从1到n整数中1出现的次数)
  14. cmd怎么使用post请求’_flutter中dio的post请求方式使用总结
  15. Jquery遮罩插件,想罩哪就罩哪!
  16. TransUNet:Transformers医学图像分割强编码器
  17. 经典再现,看到就是赚到。尚硅谷雷神 - SpringBoot 2.x 学习笔记 - 核心功能篇
  18. html 网页不可以复制粘贴,网页上的文字不能复制,三种方法教你复制全网文字...
  19. Python中的面向对象编程练习
  20. NT_iOS笔记—判断iPhone6

热门文章

  1. 宇视LCD拼接屏红外延长线如何使用
  2. PythonChallenge过关斩将录-0~10关
  3. DPDK in KVM
  4. 为何大数据如此受欢迎?目前学大数据怎么样
  5. Java IO(二)
  6. PyCharm激活时遇到This license K71U8DBPNE has been cancelled的解决办法
  7. 小玩意 - Chrome插件——GreenChrome(GC)失效如何解决?
  8. 手游创业难吗?该怎么做?
  9. 一罐子水是如何电击上千人的呢?
  10. 基于spark的电影数据分析