記一次幫同事解決數組越界的bug

前天,當我正在愉快地寫完代碼測試自己的功能時,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地提交了代碼~

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容