ArrayList 사용하는 중 황당한 결과를 맞이했다.
사건은 이렇다. 어제 저녁 더 정확히는 오늘 아침 아니 오늘 이른 새벽 2시경 원하는 부분을 얼쭈 썼다. 이어서 테스트를 하는 데 받아들일 수 없는 결과가 나왔다.ArrayList 부분에 문제가 있는 것 같았다. 더 확인하니 ArrayList 요소를 모두 지우라고 했는데 꼭 하나가 남았다.
마지막 추가한 element였다.
for(int i=0; i<mArrayListCn.size(); i++) {
mArrayListCn.remove(i);
}
코드는 위와 같다.
내 의도는 mArrayListCn이 가진 모든 값을 남김 없이 삭~*
마지막에 넣은 값이 귀신처럼 나타나서 의도하지 않은 결과를 보냈다.
그리고 막 디버그 과정을 거치고 로그를 써가며 찾아냈다.
이제 즐거운 마듬으로 원인과 결과를 한 번 둘러보고자 한다.
이를 해결하려고 관련 코드 모두를 검토하고 디버그할 때 변수 값들에 들어가고 나가는 동향을 살폈다. 아침 일어나서 부터 했다. 순수하게 해결하는데 들어간 시간이 6시간이 걸렸다. 더 재미난 점은 RemoveAll() 매서드는 보였는데 Clear() 함수를 발견할 수 없었다. RemoveAll하라는데 인자가 필요한지에 대해서 시간이 필요했다. 그래서 위와같은 코드를 만들었는데 작동하지 않은 것이었다.
그보다 가장 중요한 점은 자바 레퍼런스(안드로이드 reference)에서 ArrayList 제너릭이 가진 메서드 목록을 쭉 확인했으나 당시에 Clear()은 눈에 띄지 않았다. 이것이 바로 시야에 잡혓더라면 이러한 시간을 다른 보다 생산적 일에 썼을 것이다.
의문은 위 코드로 ArrayList에 있는 값을 모두 제거할 수 없다는 점이다!
아직 이것 요소를 모두 삭제하는것을 해결했다고ㅠ끝난것은 아니고 연결해서 더 추가할 부분이 있다.
'Android 안드로이드' 카테고리의 다른 글
코드 역난독화 deobfuscation disassemble (0) | 2014.12.28 |
---|---|
Failed to create the Java Virtual Machine. (0) | 2014.12.17 |
Parcelable 객체 만들기 (0) | 2014.12.06 |
구글맵과 프래그먼트 배치 오류 (0) | 2014.12.05 |
Call requires API level 5 (current min is 3): (0) | 2014.12.04 |