개발하다가 아래와 같은 에러 메시지가 발생할때 간단히 해결하는 방법을 공유합니다.
1. 에러 메시지
-. 에러 메시지로 배열의 크기가 0인데 0을 참조하려고 할때 발생한다.
배열에 1개 이상의 데이터가 있어야 참조가 가능하며, 0개일때는 에러를 발생하게된다.
아래는 개발중인 앱에서 발생한 에러이다.
java.lang.IndexOutOfBoundsException
Exception java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get (ArrayList.java:437)
at com.picker.megapicker.PredictActivity$predictNumber$1.invokeSuspend (PredictActivity.kt:93)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run (DispatchedTask.kt:106)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely (CoroutineScheduler.kt:570)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask (CoroutineScheduler.kt:749)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker (CoroutineScheduler.kt:677)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run (CoroutineScheduler.kt:664)
2. 해결 방법
-. 문제가 발생한 배열에 접근하기 전에 배열의 크기가 0이면 리턴하도록 코드를 추가한다.
아래 코드에서는 return@launch 가 함수를 종료하는 구문이다. (코틀린)
JAVA 및 다른언어에서는 return; 이라고 입력하면 함수가 종료된다.
if (predictTickets.size == 0) {
Log.d(Utils.TAG, "onPredict: size == 0 ")
return@launch
}
-. 아래는 Git에 업로드한 코드 수정전과 수정후이다.
3. 관련 문서 내용
java.lang
Class IndexOutOfBoundsException
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IndexOutOfBoundsException
Direct Known Subclasses:ArrayIndexOutOfBoundsException, StringIndexOutOfBoundsException
public class IndexOutOfBoundsExceptionextends RuntimeException
Thrown to indicate that an index of some sort (such as to an array, to a string, or to a vector) is out of range.
Applications can subclass this class to indicate similar exceptions.
Since:JDK1.0
Constructor Summary | |
IndexOutOfBoundsException() Constructs an IndexOutOfBoundsException with no detail message. |
|
IndexOutOfBoundsException(String s) Constructs an IndexOutOfBoundsException with the specified detail message. |
Methods inherited from class java.lang.Throwable |
getMessage, printStackTrace, toString |
Methods inherited from class java.lang.Object |
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Constructor Detail |
IndexOutOfBoundsException
public IndexOutOfBoundsException()
Constructs an IndexOutOfBoundsException with no detail message.
감사합니다.