遇到了一个诡异的问题,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 【问题汇总】列表数组越界的问题的更多相关文章

  1. 解决Android时时更新listview数组越界问题

    时时更新数据一般出现在金融.股票行业对数据的准确性要求极高情况下使用. 先来看看下面一段代码, public class MainActivity extends Activity { private ...

  2. Android 开发框架汇总

    Android 开发框架汇总 时间过的真快,转眼间就要进入到16年的8月了,现在应该是三伏期间,一个字“热”.前端时间整理了一篇“JS前端框架汇总”,然后紧接着又抽时间学习了一下Android开发,在 ...

  3. Android 自学之列表视图ListView和ListActivity

    ListView是手机系统中使用非常广泛的一种组件,它以垂直列表的形式显示所有列表项. 创建ListView有两种方式: 直接使用ListView创建. 让Activity继承ListActivity ...

  4. Android 自学之列表选择框Spinner

    列表选择框(Spinner)与Swing编程里面的Spinner不同,这里的Spinner其实就是一个列表选项框. Spinner是ViewGroup的间接子类,因此他也可作为容器使用. Spinne ...

  5. (转载)Android自定义标签列表控件LabelsView解析

    Android自定义标签列表控件LabelsView解析 作者 donkingliang 关注 2017.03.15 20:59* 字数 759 阅读 406评论 0喜欢 3 无论是在移动端的App, ...

  6. ListView 适配器实现getviewtypecount() 数组越界IndexOutOfBoundException

    ListView中Item的多布局显示,需要用到了getviewtypecount和getItemViewType这两个重写方法,但是做完后出现了如下提示错误: java.lang.ArrayInde ...

  7. iOS如何彻底避免数组越界

    我们先来看看有可能会出现的数组越界Crash的地方: ? 1 2 3 4 5 6 7 - (void)tableView:(UITableView *)tableView didSelectRowAt ...

  8. Objective-c防止数组越界而崩溃(全局效果)

    数组越界其实是很基本的问题,但是解决起来除了count的判断,还有每个调用的时候都要去判断一遍 对于不明确的数据总会有崩溃的风险 然而 每次调用都判断 那是太累了 so ..runtime&c ...

  9. fir.im Weekly - 2016 年 Android 最佳实践列表

    2016 年已经过去一半,你在年初制定的成长计划都实现了吗? 学海无涯,技术成长不是一簇而就的事情.本期 fir.im Weekly 推荐 王下邀月熊_Chevalier的 我的编程之路--知识管理与 ...

随机推荐

  1. mongodb修改器

    mongodb修改器 转载自:http://blog.csdn.net/mcpang/article/details/7752736 mongodb修改器(\(inc/\)set/\(unset/\) ...

  2. OGNL表达式介绍

    OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存 ...

  3. 五、案例-指令参考-freemarker指令、表达式

    案例-指令参考描述:本人自己测试写了一遍,如有错的地方,懂freemarker的朋友望指点指点! 案例-指令参考 表达式 一. Assign 1.<#assign name1="北京& ...

  4. jquery动态加载JS【方法getScript】的改进

    http://www.cnblogs.com/cuitsl/archive/2012/11/15/2771549.html

  5. Java8 Lambda sample (iwantmoon.com出品)

    转载请注明出处:http://iwantmoon.com/Post/83a4497a74674612834965857e7bc044 .Net转到Java来,不知不觉已经有两年了,之前已经用习惯的li ...

  6. REST API 基于ACCESS TOKEN 的权限解决方案

    REST 设计原则是statelessness的,而且但客户端是APP时,从APP发起的请求,不是基于bowers,无法带相同的sessionid,所以比较好的方案是每次请求都带一个accesstok ...

  7. Java内存模型(JMM)

    参考: 1. http://www.tuicool.com/articles/UVzuQb

  8. Search API 官方文档 可以用了查看自己的app

    Search API October 24, 2012 - HTTPS is now supported for Search and Lookup requests. Please update y ...

  9. Redis Master/Slave 实践

    本次我们将模拟 Master(1) + Slave(4) 的场景,并通过ASP.NET WEB API进行数据的提交及查询,监控 Redis Master/Slave 数据分发情况,只大致概述,不会按 ...

  10. 超快的 FastText

    Word2Vec 作者.脸书科学家 Mikolov 文本分类新作 fastText:方法简单,号称并不需要深度学习那样几小时或者几天的训练时间,在普通 CPU 上最快几十秒就可以训练模型,得到不错的结 ...