반응형
Android 개발을 하다가 위와 같은 에러를 마주하게 되었습니다.
에러가 발생한 상황은 ViewPager의 한 화면에서 일정 view의 터치를 연타하다가 순간 적으로 View를 터치할 경우 위와 같은 에러가 발생하였습니다.
Log를 확인해 보니
java.lang.IllegalArgumentException: pointerIndex out of range
at android.view.MotionEvent.nativeGetAxisValue(Native Method)
at android.view.MotionEvent.getX(MotionEvent.java:1981)
at android.support.v4.view.MotionEventCompatEclair.getX(MotionEventCompatEclair.java:32)
at android.support.v4.view.MotionEventCompat$EclairMotionEventVersionImpl.getX(MotionEventCompat.java:86)
at android.support.v4.view.MotionEventCompat.getX(MotionEventCompat.java:184)
at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:1339)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1817)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at
이렇게 먼가 Touch에서 받는 MotionEvent에 문제가 있는 것으로 확인 되어 Touch 시 들어오는 Event의 좌표를 통하여 처리를 하려 했습니다. 하지만 로그를 확인해보니 문제의 getX를 통해 들어오는 좌표는 딱히 문제가 없었고. 이 때부터 구글링을 시작하게 되었습니다.
그리고 발견한 해결 방법은
ViewPager를 커스텀으로 만들어서 다음과 같이 try catch로 처리를 해주면 Exception이 발생하면 앱이 죽지 않고 처리되도록 수정을 하였습니다.
class CustomViewPager : ViewPager {
constructor(context: Context) : super(context)
constructor(context: Context, attributeSet: AttributeSet) : super(context,attributeSet)
override fun onTouchEvent(ev: MotionEvent?): Boolean = try {
super.onTouchEvent(ev)
} catch (e : Exception){
false
}
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean = try {
super.onInterceptTouchEvent(ev)
}catch (e : Exception){
false
}
}
위의 방식이 찜찜하기 한데 가장 확실하고 정확하며, 다른 code에 영향을 미치지 않는 방식으로 판단되어 사용하였습니다.
반응형
'2023년 이전 > Android' 카테고리의 다른 글
Ime hide catch (0) | 2020.09.25 |
---|---|
MpAndroidChart 사용 후기 (1) | 2020.05.30 |
android.os.properties 사용기 (1) | 2019.12.11 |
Android 에서 https 사용하여 접속하기 (0) | 2019.12.03 |
Android 백그라운드 - Thread, Handler ,Looper의 차이 (0) | 2019.11.12 |