https://lottiefiles.com/supported-features Lottie Supported Features Lottie does not support all features of Adobe After Effects; please refer to the list below for details. lottiefiles.com 에서 각각 플랫폼에서 제공하는 Feature 들을 확인해보자! (저의 경우에는 Layer Effects 를 Android 에서 제공하지 않는 것이 문제 였습니다)
DateDto( @SerialName("created_at") var createdAt: Instant?, @SerialName("updated_at") var updatedAt: Instant? ) Instant 클래스를 타고 들어가서 보면 ? ISO-8601 를 사용하는 것을 알 수 있고 2020-12-09T09:16:56.000124Z 와 같은 예시도 볼 수 있다. 역직렬화 화는 과정(deserialize)에서 pase 하는 과정중에 포맷이 맞지 않는다면 DateTimeParseException 을 던지는 것도 알 수 있다. 항상 코드에 답이 있다! 혹시나 서버에서 다른 포맷으로 내려주고 파싱해야 한다면 KSerializer 를 상속받는 클래스를 만들고 직렬화, 역직렬화를 구현해주면 된다는 정보도 ..
오늘 이야기 하는 Tips 은 거의 활용되기 뻘팁이 될 확률이 높고, 그냥 "이렇게도 가능하다" 정도로만 이해해주시면 감사합니다. 해당 프로젝트 주소는 하단에 적어두었습니다. 일반적으로 Domain 은 Pure Java/Kotlin 으로 하는 경우가 많습니다. 따라서 Paging3 를 사용하다보면 도메인에 PagingSource, PagingData 등의 자료구조를 활용하지 못하기 때문에 고민에 빠지게 됩니다. 거의 대부분 아티클을 보면 // alternatively - without Android dependencies for tests implementation "androidx.paging:paging-common:$paging_version" 를 추가해서 사용해라 라는 이야기가 많습니다. 하지만 ..
이따금식 LifecycleOnwer 를 사용하기 위해, View 의 확장함수인 findViewTreeLifecycleOwner 를 사용하는 경우가 있습니다. 간혹 아무 생각 없이 사용하다보면 findViewTreeLifecycleOwner 가 null 을 반환하는 경우가 있습니다. RecyclerView 에서 사용하는 케이스는 https://pluu.github.io/blog/android/2021/09/20/lifecycleowner/ 에서 잘 설명하고 있어서 해당 글을 참고 해도 좋을 것 같습니다. RecyclerView 에서는 doOnAttach 함수를 사용하여, Lifecycle 을 얻어올 수 있지만, doOnAttach 로 해결되지 않는 케이스들도 존재 합니다. 먼저 ViewTreeLifecyc..
TL;DR "네트워크 응답을 Result 와 같은 클래스로 래핑하면 실수할 확률이 높습니다." 상태 코드가 필요하면 awaitResponse 를 이용하고 아니라면 await 를 사용 합시다 해당 게시물은 실무에 도움이 되는 지식은 없고, 단순히 호기심으로 진행되었습니다. 회사에서 레거시 코드를 건드리는 중에, 신기한 일을 경험하였습니다. runCatching { apiCall.await() } .onSuccess { // ... } .onFailure { // ... } 와 같은 코드에서 네트워크 요청이 실패하여 400 이상 상태 코드들이 내려오는데 모두 onSuccess 를 타고 있었습니다. 문제가 있던 apiCall.await() 의 자료형은 아래와 같았습니다. apiCall 이 RxJava Sing..
히스토리를 찾아보니, Compose 를 현업에 처음 사용한 것이 작년 11월이네요. 주기적으로 밀도 있게 쓰지는 않았지만, 시간 될 때마다 조금식 기여하여 회사 프로젝트에 20 개 넘는 화면을 Compose 로 구성하였고, QDSC(Qanda-design-system-compose) Sample App 을 만들기도 하였습니다. QDSC 는 아직 완성 단계는 아니지만, 거의 마무리 단계인듯 보이네요. 앞으로 적을 글은 매우 주관적인 내용들을 담고 있습니다. 장점1 주관적으로 생각하는 Compose 의 가장 큰 장점을 하나만 선택하자면 "직관적" 이라고 말할 수 있을 것 같습니다. 선언형이기 때문에 컴포넌트(Box, Column, Row, Chip, Lazy* ...) 의 특성을 이해 한 뒤에 이를 나열하기..
해당 글은 주관적인 의견이 많이 들어가고, 잘못된 내용이 있을 수도 있습니다 :) 코드는 아래 링크로 첨부해두겠습니다 이번 주제는 서버에서 etag, last-modified 등의 캐시 처리를 지원해주지 않을 때, 안드로이드에서 간단히 처리할 수 있는 방법에 대해 알아보려고 합니다. *서버에서 캐시 처리를 위한 정보(Cache-Control) 를 잘 내려준다면, OkHttp 를 이용하여 CacheDirectory 만 생성해주면 알아서 처리해주기 때문에 해당 포스트를 읽지 않아도 됩니다. 먼저 안드로이드에서 캐시하면 가장 바로 떠오르는 것중 하나가 Room, sqlite, realm 과 같은 로컬 데이터 베이스를 사용하는 것 입니다. 해당 방식의 처리도 좋지만, Table 과 Entity 를 정의해야 한다..
https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/#about Blocking-NonBlocking-Synchronous-Asynchronous 꽤 자주 접하는 용어다. 특히나 요즘들어 더 자주 접하게 되는데, 얼추 알고는 있고 알고 있는게 틀린 것도 아니지만, 막상 명확하게 구분해서 설명하라면 또 만만치가 않은.. 그래서 찾아보면 homoefficio.github.io 본문의 정리를 인용하면, Blocking/NonBlocking은 호출되는 함수가 바로 리턴하느냐 마느냐가 관심사 바로 리턴하지 않으면 Blocking 바로 리턴하면 NonBlocking Synchronous/Asynchronous는 ..
해당 글에서는 AOSP 코드와 Material 코드를 보며 어떤식으로 에러를 수정하였는지 전달하고, 혹시나 AOSP 코드 등을 확인해야한다면 어떤식으로 접근할지 도움을 드리기 위해 작성하는 글입니다. 배포를 하기 위해 새로 개발된 Feature 들을 머지하고 QA 를 하던 도중 아래와 같은 에러가 발생하였습니다. MaterialCardView 에서 발생하고 있었고, 특징으로는 Android 9 이하의 버전들에서 발생하고 있었습니다. 먼저 사용하는 쪽의 코드를 간략하게 확인하였습니다. (checked 에 들어가는 값은 viewModel 을 통해 넣어주고 있고 회사 코드가 드러날 수 있어 제거하였습니다) 이전에 문제 없이 잘 동작했기 때문에 한눈에 어떤 것이 문제 인지 알수가 없었습니다. 또한 코드가 변경된..