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