결론만 이야기 드리면 LottieAnimationView 클래스에서 제공하는 setFailureListener 를 구현하면 됩니다.
Url 을 통해 Lottie 를 이용할 경우, setAnimationFromUrl 를 사용하게 되는데
코드를 차근차근 보면 CacheComposition (캐시 허용) 이 true 라면 앞의 메서드가 호출되어 cacheKey 에 "url_" prefix 가 붙은 cacheKey 가 넘어가고 아니라면 cacheKey 에는 null 이 들어가게 되고 결과를 LottieTast<LottieComposition> 자료형의 task 에 담고 있습니다.
그리고 실패하는 경우에는 wrappedFailureListener 콜백 함수를 통해 결과를 넘겨 주고 있습니다.
실패했을 때 보여줄 이미지(fallbackResource)가 있다면 세팅해주고, failureListener 가 정의 되어 있다면 해당 콜백을 실행시키고 아니라면, DEFAULT_FAILURE_LISTNER 를 실행하고 있습니다.
DEFAULT_FAILURE_LISTNER 는 throwable 을 파라미터로 받아서 만약 네트워크 오류라면 내부적으로 경고 레벨 정도로 로깅하고 종료하네요. 하지만 나머지 에러 (파싱, isNetworkException 에 정의 되지 않은 네트워크 오류 등) 인 경우에는 IllegalStateException 을 던지는 것을 볼 수 있습니다. 그리고 맨 위로가서 크래시리틱스의 에러와 비교하면 정확히 일치하는 것을 볼 수 있습니다.
추가적으로 isNetworkException 에는 어떤 네트워크 에러들인 경우에는 경고정도로만 처리할까요 ?
일반적으로 발생할 수 있는 네트워크 에러들로 정의 되어 있지만, 이외에도 정말 많은 에러들이 발생할 수 있습니다.
Lottie 에서 url 을 통해 데이터를 가져올 때 HttpUrlConnection 을 활용하고 있네요.
HttpUrlConnection 이 존재하는 패키지에서만 Exception 을 검색해도 108 개가 넘게 검색되고 있습니다. 따라서 네트워크 에러라도 조심은 해야 될 것 같습니다.
그럼 20000
'Android > Development Tips' 카테고리의 다른 글
확대, 축소, 이동, 회전 가능한 컴포즈 뷰 (0) | 2022.12.30 |
---|---|
간단 Tips. FrameLayout 위에 Fragment 를 올리는 것보다 FragmentContainerView 에 Fragment 를 올리는 것이 안전한 이유 (0) | 2022.11.30 |
간단 Tips. 코루틴 SupervisorJob 또는 SupervisorScope 를 사용해야 하는 경우 (0) | 2022.11.29 |
간단 Tips. Lottie 가 Android, iOS, Web, Window 등 에서 다르게 보인다면? (0) | 2022.11.29 |
간단 Tips. KotlinxSerialization 를 사용하여 Date 를 파싱하는데 에러가 난다면? (0) | 2022.11.29 |