前天,当我正在愉快地写完代码测试自己的功能时,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地提交了代码~
网友评论