Published: 23 Mar 2018 › Updated: 23 Mar 2018
Android 의 Cursor에서 Kotlin의 Closeable.use 를 쓸 경우엔 주의하자
Kotlin의 Closeable은 use라는 유용한 확장함수를 제공한다.
안드로이드 앱을 개발할 때, DB나 ContentProvider에서 값을 가져오기 위해선 Cursor를 사용해야 하는데, 이 때 use를 이용하면 깔끔하게 작업을 처리할 수 있다.
하지만 릴리즈하고 보니 ICS 기기에서 다음과 같은 크래시가 접수되었다.
Caused by java.lang.ClassCastException
android.database.sqlite.SQLiteCursor cannot be cast to java.io.Closeable
왜죠?
검색해보니 stackoverflow에 다음과 같은 내용이 있었다.
Cursor는 젤리빈부터 Closeable 을 implement했어. ICS 시절의 Cursor는 Closeable이 아니야!
옆자리 동료가 플랫폼 코드를 diff 해보니 정말로 젤리빈 부터 Cursor가 Closeable을 구현하기 시작했다.
따라서! minSDK 16 미만인 경우 Cursor에 use 펑션을 쓰면 위험하다!
대충 다음과 같은 해결책을 생각할 수 있다.
- 이 기회를 틈타 minSDK 를 16 이상으로 올린다 (야호!)
- use를 안쓰던가, 안전하게 Cursor를 다룰 수 있는 짝퉁 use를 만들어서 사용한다.
난 2번을 택했다.
Leave Android 의 Cursor에서 Kotlin의 Closeable.use 를 쓸 경우엔 주의하자 to:
Read more #android posts
Best Posts From 오리대마왕
We have not curated any of kingori2's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From 오리대마왕
- 안드로이드 라이브러리 프로젝트의 리소스 충돌 해결하기
- koin 2.0 맛보기
- 맥북의 카메라로 타임랩스 동영상 만들기
- Kotlin의 lazy field를 가진 serialize 객체를 Proguard 적용할 때 주의할 점
- 카카오 T 택시 기사용 앱 Kotlin 적용기
- 여러개의 사내 배포 aar을 사용할 때 로컬 캐시로 인한 문제를 빨리 파악하기
- Android Studio (IntelliJ) 디버거 활용 팁
- Intent.FLAG_ACTIVITY_NEW_TASK 사용할 때 조심할 점
- 드로이드나이츠 2018 발표 후기
- Kotlin 의 nullable type 추론 이슈 해결
- ohmyzsh , agnoster 테마 설정방법 정리
- Android Support library 27.0.x 와 @Nullable hell
- Android 의 Cursor에서 Kotlin의 Closeable.use 를 쓸 경우엔 주의하자