记一次帮同事解决数组越界的bug

2017-12-06  本文已影响108人  努力深耕Android的小透明

前天,当我正在愉快地写完代码测试自己的功能时,app突然崩了.
其实我的内心是崩溃的...
于是,我查看了下logcat,发现了以下错误

12-04 09:29:30.237 10329-10329/? E/CrashReport: java.lang.IndexOutOfBoundsException: Invalid index 4, size is 0
                                                    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
                                                    at java.util.ArrayList.get(ArrayList.java:308)
                                                    at com.test.activity.ChooseCityActivity$ListAdapter.getView(ChooseCityActivity.java:553)
                                                

这是一个很明显的数组越界错误,于是查看错误代码处,发现是在listview的
adapter的getView方法里出现了问题:
程序崩溃的原因是: 当用户没有获取到数据list时(可能是网络状态不好或服务器异常),就已经判断了position的大,就会出现数组越界的风险,
于是在代码中加上了这样一行代码进行判断list是否为空:

                    if (list != null && list.size() > 0) {

修改后代码如下:

   @Override
        public View getView(int position, View convertView, ViewGroup parent) {
                ....
                if (position >= 1) {
                    //为解决未获取到数据时 数据越界的bug
                    if (list != null && list.size() > 0) {
                        holder.name.setText(list.get(position).getName());
                        String currentStr = getAlpha(list.get(position).getPinyin());
                        String previewStr = (position - 1) >= 0 ? getAlpha(list
                                .get(position - 1).getPinyin()) : " ";
                        if (!previewStr.equals(currentStr)) {
                            holder.alpha.setVisibility(View.VISIBLE);
                            holder.alpha.setText(currentStr);
                        } else {
                            holder.alpha.setVisibility(View.GONE);
                        }
                    }
                }
            }
            return convertView;
        }

ok,完美撒花解决问题~~
跟同事核对了以下happy,happy地提交了代码~

上一篇下一篇

猜你喜欢

热点阅读