Android 【问题汇总】列表数组越界的问题
遇到了一个诡异的问题,ListView发生数组越界(偶尔会),程序崩溃。
错误信息如下:
W/dalvikvm( ): threadid=: thread exiting with uncaught exception (group=0x40015568)
E/zhe800_android( ): Invalid index , size is
E/zhe800_android( ): java.lang.IndexOutOfBoundsException: Invalid index , size is
E/zhe800_android( ): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:)
E/zhe800_android( ): at java.util.ArrayList.get(ArrayList.java:)
E/zhe800_android( ): at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:)
E/zhe800_android( ): at android.widget.AbsListView.obtainView(AbsListView.java:)
E/zhe800_android( ): at android.widget.ListView.makeAndAddView(ListView.java:)
E/zhe800_android( ): at android.widget.ListView.fillUp(ListView.java:)
E/zhe800_android( ): at android.widget.ListView.fillGap(ListView.java:)
E/zhe800_android( ): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:)
E/zhe800_android( ): at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:)
E/zhe800_android( ): at android.os.Handler.handleCallback(Handler.java:)
E/zhe800_android( ): at android.os.Handler.dispatchMessage(Handler.java:)
E/zhe800_android( ): at android.os.Looper.loop(Looper.java:)
E/zhe800_android( ): at android.app.ActivityThread.main(ActivityThread.java:)
E/zhe800_android( ): at java.lang.reflect.Method.invokeNative(Native Method)
E/zhe800_android( ): at java.lang.reflect.Method.invoke(Method.java:)
E/zhe800_android( ): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:)
E/zhe800_android( ): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:)
E/zhe800_android( ): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( ): FATAL EXCEPTION: main
E/AndroidRuntime( ): java.lang.IndexOutOfBoundsException: Invalid index , size is
E/AndroidRuntime( ): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:)
E/AndroidRuntime( ): at java.util.ArrayList.get(ArrayList.java:)
E/AndroidRuntime( ): at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:)
E/AndroidRuntime( ): at android.widget.AbsListView.obtainView(AbsListView.java:)
E/AndroidRuntime( ): at android.widget.ListView.makeAndAddView(ListView.java:)
E/AndroidRuntime( ): at android.widget.ListView.fillUp(ListView.java:)
E/AndroidRuntime( ): at android.widget.ListView.fillGap(ListView.java:)
E/AndroidRuntime( ): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:)
E/AndroidRuntime( ): at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:)
E/AndroidRuntime( ): at android.os.Handler.handleCallback(Handler.java:)
E/AndroidRuntime( ): at android.os.Handler.dispatchMessage(Handler.java:)
E/AndroidRuntime( ): at android.os.Looper.loop(Looper.java:)
E/AndroidRuntime( ): at android.app.ActivityThread.main(ActivityThread.java:)
E/AndroidRuntime( ): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( ): at java.lang.reflect.Method.invoke(Method.java:)
E/AndroidRuntime( ): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:)
E/AndroidRuntime( ): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:)
E/AndroidRuntime( ): at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager( ): Force finishing activity com.tuan800.tao800/.activities.CategoryDealActivity
从错误日志看,没有定位到具体的问题所在。
跟踪ListView的源码,可以看出来是与Adapter绑定的数据源存在数组越界。
因为此时,可能会有两个甚至多个线程同时修改数据源。
导致这个问题的发生。
Android 【问题汇总】列表数组越界的问题的更多相关文章
- 解决Android时时更新listview数组越界问题
时时更新数据一般出现在金融.股票行业对数据的准确性要求极高情况下使用. 先来看看下面一段代码, public class MainActivity extends Activity { private ...
- Android 开发框架汇总
Android 开发框架汇总 时间过的真快,转眼间就要进入到16年的8月了,现在应该是三伏期间,一个字“热”.前端时间整理了一篇“JS前端框架汇总”,然后紧接着又抽时间学习了一下Android开发,在 ...
- Android 自学之列表视图ListView和ListActivity
ListView是手机系统中使用非常广泛的一种组件,它以垂直列表的形式显示所有列表项. 创建ListView有两种方式: 直接使用ListView创建. 让Activity继承ListActivity ...
- Android 自学之列表选择框Spinner
列表选择框(Spinner)与Swing编程里面的Spinner不同,这里的Spinner其实就是一个列表选项框. Spinner是ViewGroup的间接子类,因此他也可作为容器使用. Spinne ...
- (转载)Android自定义标签列表控件LabelsView解析
Android自定义标签列表控件LabelsView解析 作者 donkingliang 关注 2017.03.15 20:59* 字数 759 阅读 406评论 0喜欢 3 无论是在移动端的App, ...
- ListView 适配器实现getviewtypecount() 数组越界IndexOutOfBoundException
ListView中Item的多布局显示,需要用到了getviewtypecount和getItemViewType这两个重写方法,但是做完后出现了如下提示错误: java.lang.ArrayInde ...
- iOS如何彻底避免数组越界
我们先来看看有可能会出现的数组越界Crash的地方: ? 1 2 3 4 5 6 7 - (void)tableView:(UITableView *)tableView didSelectRowAt ...
- Objective-c防止数组越界而崩溃(全局效果)
数组越界其实是很基本的问题,但是解决起来除了count的判断,还有每个调用的时候都要去判断一遍 对于不明确的数据总会有崩溃的风险 然而 每次调用都判断 那是太累了 so ..runtime&c ...
- fir.im Weekly - 2016 年 Android 最佳实践列表
2016 年已经过去一半,你在年初制定的成长计划都实现了吗? 学海无涯,技术成长不是一簇而就的事情.本期 fir.im Weekly 推荐 王下邀月熊_Chevalier的 我的编程之路--知识管理与 ...
随机推荐
- 使用getElementById获取xml中的指定元素
Document有一个getElementById的方法,在文档中的解释是: 返回具有带给定值的 ID 属性的 Element.如果不存在此类元素,则此方法返回 null.如果多个元素具有带该 ...
- 团队开发——Alpha版总结会议
本组目前存在的问题: 1.在选题的时候,题目选的比较有难度,造成后期工作量较大,实现有难度(未能正确估计项目的难度). 2.最初规划时,设计的功能较多,但是技术水平达不到,导致目前完成功能较少. 3. ...
- asp.net动态添加GridView的模板列,并获取列值
一.动态添加模板列: 1.建立模板列样式: 说明:下边代码可以直接写在aspx文件中,也可以单独建立cs文件:另外,我没有写button.linkButton等控件,意思差不多,不过当需要添加事件时, ...
- 《编写高质量代码:改善Java程序的151个建议》笔记
To fight the unthinkable,you have to be willing to do the unthinkable. 不要在循环中使用try catch,应该放在循环的外面 ...
- Portion of class Throwable’s inheritance hierarchy
- 重装系统必做之——更换Windows系统的默认临时文件的存储目录
作为一名计算机爱好者,重装电脑是家常便饭,但是重装电脑的目的无非就是: 1.操作系统更新换代: 2.系统速度太慢: 或者更多.... 我们大多数目的都是上述中第2点,有时候是否仅仅重装系统而忽略了一些 ...
- 02.Hibernate映射基础
前言:Hibernate的核心功能是根据数据库到实体类的映射,自动从数据库绑定数据到实体类.使我们操作实体类(Java对象)就能对数据库进行增.删.查.改,而不用调用JDBC API使数据操作变得简单 ...
- sqlite时间比较语法
如下: 字段 > datetime('2000-01-01 01:01:01') AND 字段 < datetime('2001-01-01 01:01:01');
- linux下安装vsftp
1. yum安装vsftp # yum install vsftpd 2. 配置Vsftpd 安装完之后我们要对它进行配置,才能正常使用.编辑vsftpd的配置文件vi /etc/vsftpd/vsf ...
- JavaScript之setcookie()讲解
function setcookie(name,value){ var Days = 30; var exp = new Date(); exp ...