Android 【问题汇总】列表数组越界的问题

遇到了一个诡异的问题,ListView发生数组越界(偶尔会),程序崩溃。

错误信息如下:

    W/dalvikvm( 5176): threadid=1: thread exiting with uncaught exception (group=0x40015568)
    E/zhe800_android( 5176): Invalid index 2, size is 0
    E/zhe800_android( 5176): java.lang.IndexOutOfBoundsException: Invalid index 2, size is 0
    E/zhe800_android( 5176):    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
    E/zhe800_android( 5176):    at java.util.ArrayList.get(ArrayList.java:311)
    E/zhe800_android( 5176):    at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:225)
    E/zhe800_android( 5176):    at android.widget.AbsListView.obtainView(AbsListView.java:1424)
    E/zhe800_android( 5176):    at android.widget.ListView.makeAndAddView(ListView.java:1755)
    E/zhe800_android( 5176):    at android.widget.ListView.fillUp(ListView.java:704)
    E/zhe800_android( 5176):    at android.widget.ListView.fillGap(ListView.java:650)
    E/zhe800_android( 5176):    at android.widget.AbsListView.trackMotionScroll(AbsListView.java:3422)
    E/zhe800_android( 5176):    at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:2920)
    E/zhe800_android( 5176):    at android.os.Handler.handleCallback(Handler.java:587)
    E/zhe800_android( 5176):    at android.os.Handler.dispatchMessage(Handler.java:92)
    E/zhe800_android( 5176):    at android.os.Looper.loop(Looper.java:130)
    E/zhe800_android( 5176):    at android.app.ActivityThread.main(ActivityThread.java:3703)
    E/zhe800_android( 5176):    at java.lang.reflect.Method.invokeNative(Native Method)
    E/zhe800_android( 5176):    at java.lang.reflect.Method.invoke(Method.java:507)
    E/zhe800_android( 5176):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
    E/zhe800_android( 5176):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
    E/zhe800_android( 5176):    at dalvik.system.NativeStart.main(Native Method)
    E/AndroidRuntime( 5176): FATAL EXCEPTION: main
    E/AndroidRuntime( 5176): java.lang.IndexOutOfBoundsException: Invalid index 2, size is 0
    E/AndroidRuntime( 5176):    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
    E/AndroidRuntime( 5176):    at java.util.ArrayList.get(ArrayList.java:311)
    E/AndroidRuntime( 5176):    at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:225)
    E/AndroidRuntime( 5176):    at android.widget.AbsListView.obtainView(AbsListView.java:1424)
    E/AndroidRuntime( 5176):    at android.widget.ListView.makeAndAddView(ListView.java:1755)
    E/AndroidRuntime( 5176):    at android.widget.ListView.fillUp(ListView.java:704)
    E/AndroidRuntime( 5176):    at android.widget.ListView.fillGap(ListView.java:650)
    E/AndroidRuntime( 5176):    at android.widget.AbsListView.trackMotionScroll(AbsListView.java:3422)
    E/AndroidRuntime( 5176):    at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:2920)
    E/AndroidRuntime( 5176):    at android.os.Handler.handleCallback(Handler.java:587)
    E/AndroidRuntime( 5176):    at android.os.Handler.dispatchMessage(Handler.java:92)
    E/AndroidRuntime( 5176):    at android.os.Looper.loop(Looper.java:130)
    E/AndroidRuntime( 5176):    at android.app.ActivityThread.main(ActivityThread.java:3703)
    E/AndroidRuntime( 5176):    at java.lang.reflect.Method.invokeNative(Native Method)
    E/AndroidRuntime( 5176):    at java.lang.reflect.Method.invoke(Method.java:507)
    E/AndroidRuntime( 5176):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
    E/AndroidRuntime( 5176):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
    E/AndroidRuntime( 5176):    at dalvik.system.NativeStart.main(Native Method)
    W/ActivityManager(  197):   Force finishing activity com.tuan800.tao800/.activities.CategoryDealActivity  

从错误日志看,没有定位到具体的问题所在。

跟踪ListView的源码,可以看出来是与Adapter绑定的数据源存在数组越界。

因为此时,可能会有两个甚至多个线程同时修改数据源。

导致这个问题的发生。

时间: 2024-11-05 19:05:42

Android 【问题汇总】列表数组越界的问题的相关文章

Android 系统调用 汇总

intent大全: 1.从google搜索内容 Intent intent = new Intent(); intent.setAction(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY,"searchString") startActivity(intent); 2.浏览网页 Uri uri =Uri.parse("http://www.google.com"); Intent it 

Android 自学之列表选择框Spinner

列表选择框(Spinner)与Swing编程里面的Spinner不同,这里的Spinner其实就是一个列表选项框. Spinner是ViewGroup的间接子类,因此他也可作为容器使用. Spinner支持的常用XML属性和说明: XML属性 说明 android:prompt 设置该列表框的提示 android:entries 使用数组资源设置该下拉列表框的列表项目 啥都不说了我们看看代码: layout/main.xml 1 <?xml version="1.0" encod

Android 开发框架汇总

Android 开发框架汇总 时间过的真快,转眼间就要进入到16年的8月了,现在应该是三伏期间,一个字“热”.前端时间整理了一篇“JS前端框架汇总”,然后紧接着又抽时间学习了一下Android开发,在慕课网上学习了很多视频,感觉收获很大,有些事吧,得坚持,多了解些总不是什么坏事.有时候我也会抽时间去国家图书馆看看,书的种类也没有限制,逮着啥看啥. 今天以Android初学者的身份我也试着整理一下Android开发中常用到的一些框架,就当是学习成果,其实多半也是从网上搜的,然后做了一个汇总.那咱就

android学习--视图列表(ListView和ListActivity)

说明: 视图列表(ListView和ListActivity)与AutoComplete.Spinner类似,它们都需要一个供显示的列表项,可以需要借助于内容Adapter提供显示列表项 创建ListView有两种方式: (1)直接使用ListView进行创建 (2)Activity继承ListActivity ListView的常用XML属性 下面分别用两种方式创建ListView 方式一:直接使用ListView进行创建 (1)   main_activity.xml 下面布局两个listV

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

Android自定义标签列表控件LabelsView解析 作者 donkingliang 关注 2017.03.15 20:59* 字数 759 阅读 406评论 0喜欢 3 无论是在移动端的App,还是在前端的网页,我们经常会看到下面这种标签的列表效果: 标签列表 标签从左到右摆放,一行显示不下时自动换行.这样的效果用Android源生的控件很不好实现,所以往往需要我们自己去自定义控件.我在开发中就遇到过几次要实现这样的标签列表效果,所以就自己写了个控件,放到我的GitHub,方便以后使用.有

android 获取相册列表的实现(三)

该项目实现的功能如下: 获取手机相册,点击每个相册之后进入该相册的图片列表界面,在图片列表界面可以实现图片多选,然后进入所选择的图片界面,在该界面内可以实现所选图片的上传等功能. 该项目最大特色: 1.获取相册列表,目前网络上面介绍获取相册的项目很少,本文专门讲述相册的获取. 2.使用Android-Universal-Image-Loader集成框架-第三方jar包加载本地图片,熟悉这个jar的开发者肯定不陌生,该jar包十分强大,除了可以获取网络图片,本地图片也是可以的.同时,通过引用第三方

Android ListView复杂列表优化实践

原文:Android ListView复杂列表优化实践 很多社交App都不免会涉及到复杂的列表元素实现,一个列表上面可能大量的图片,不定长的评论列表,给手机端的程序员带来了不少的挑战.本文就是在实现复杂的列表滑动的情况下,利用已知的优化方法指导下的一次优化实践,旨在提升ListView的滑动流畅度,为用户带来良好的体验. 1:设计稿: 这是列表中可能出现的ItemView,有两种,但是又有许多相同的地方,比如一样有点赞的图片,评论等...其中,评论和点赞的数量是可变的. 2:使用一般布局带来的问

Android 实现用户列表信息滑动删除功能和选择删除功能

在项目开发过程中,常常需要对用户列表的信息进行删除的操作.Android中常用的删除操作方式有两种 ,一种就是类似微信的滑动出现删除按钮方式,还有一种是通过CheckBox进行选择,然后通过按钮进行删除的方式.本来的实例集成上述的两种操作方式来实现用户列表删除的效果. 设计思路:在适配器类MyAdapter一个滑动删除按钮显示或隐藏的Map,一个用于CheckBox是否选中的Map和一个与MainAcitivyt进行数据交互的接口ContentsDeleteListener,同时该接口包含两个方

Android Bug 汇总

1 问题: FragmentStatePagerAdapter+viewpager第二次进入该fragment不显示数据 解决方法: 在含有ViewPager的Fragment的onCreateView方法中添加代码: if (view != null) { ViewGroup parent = (ViewGroup) view.getParent(); if (parent != null) { parent.removeView(view); } return view; } Android