막무가내 삽질 블로그
java.lang.IndexOutOfBoundsException: 에러 난 이유 본문
728x90
다이얼로그에서 아이템을 추가,삭제 했을때 발생한 에러
기존코드에서 테스트 했을 때 문제없이 진행되었다. 근데 어떤 상황이 닥칠지 몰라 아이템을 추가,삭제 무한으로 테스트 해보다가 발생한 상황
내가 가지고 있는 사이즈보다 추가할 인덱스가 클경우 발생하는 오류
해당 오류가 발생했을때 앱이 강제로 종료된다. 따라서 앱이 튕기지 않게 예외처리를 해주었다.
기존코드
builder.setMultiChoiceItems(items, null, (dialogInterface, i, b) -> {
if (b) {
select.add(i);
} else {
select.remove(i);
}
});
해결코드
builder.setMultiChoiceItems(items, null, (dialogInterface, i, b) -> {
if (b) {
try {
select.add(i);
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
}
} else {
try {
select.remove(i);
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
}
}
});
이러면 앱이 튕기지 않고 값이 그대로 나왔다. 하지만 이 코드도 무한테스트 해보니 select 값에 지워도 계속 값이 저장되는 걸 발견했다. 코드적으로 문제 있는거 같아서 다시 살펴보았다.
A list 에 9개의 값이 들어가 있고 클릭했을때 B list 에 A의 인덱스를 넣는 코드 였다.(기존코드 참고)
이걸 인덱스 값 말고 A list에 값을 넣어주고 해제했을때 값을 삭제하니 바로 해결했다.
최종코드
builder.setMultiChoiceItems(items, null, (dialogInterface, i, b) -> {
if (b) {
select.add(hobbyItem.get(i));
Log.d(TAG, "인덱스" + i);
Log.d(TAG, "값" + hobbyItem.get(i));
} else {
select.remove(hobbyItem.get(i));
Log.d(TAG, "인덱스" + i);
Log.d(TAG, "값" + hobbyItem.get(i));
}
});
안드로이드 스터디 모집
www.notion.so/fundevjay/Android-ddf96b24265e414fb2d9e8fc5d388b80
'Android' 카테고리의 다른 글
안드로이드 fcm push notification, send fcm device to device (1) | 2019.12.31 |
---|---|
android infinite/endless scroll (0) | 2019.12.25 |
android null object reference (0) | 2019.12.15 |
안드로이드 mvp + retrofit + php 간단 정리 (0) | 2019.12.08 |
Resources$NotFoundException: String resource ID (0) | 2019.12.07 |
Comments