일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Quickly
- todofication
- recyclerview
- Android
- onViewCreated
- compileKotlin FAILED
- List
- RX
- Koin
- 타이머앱
- java.lang.OutOfMemoryError: Java heap space
- 특가알람
- 특가촌
- 뷰 상태복구
- android clean architecture
- fragment
- 대학톡
- 올인원타이머
- 뷰 상태 저장
- nvidia-docker
- 카드 내역 공유 앱
- kotlin
- RxJava
- 안드로이드 클린 아키텍쳐
- andorid
- 카드내역 공유
- 특가게시판
- 작성
- 안드로이드
- moveToState
- Today
- Total
목록android (29)
seoft
concatMapEager는 기존 concatMap 역할에서 스트림이 병렬로 처리된다는 특징을 가지고 있다. 그렇기 때문에 동시성과 함께 순서가 보장되어야 될 경우 concatMapEager 연산자를 사용하면 된다. 여러 api host로부터 값을 받오는 즉시 처리하되, 순서를 보장해야되는게 요구사항이라고 가정을 해본다. request함수를 사전 정의 하였는데 각 url에 따른 randome 시간 후에 response가 오는 상황으로 가정하고 해당 함수를 거쳐 Single로 반환된다. url string 리스트를 개별 flowable로 반환하여 concatMapEager내에서 하나씩 태우게 되고 반환된 Single 결과값을 flowable으로 변환에 스트림을 진행한다. string리스트의 순서와 동일하게..
zip 연산자를 통해 Observable을 동시에 실행하고 결과값을 받아 처리할 수 있다. 이때 FunctionN 은 ~9 까지 지원하는데 만약 Observable이 컴파일단에 정해지지 않고 동적으로 할당되거나 갯수가 10개가 넘는 경우에는 위와 같은 방법으로 어려울 수 있고 다음과 같은 방법으로 사용할 수 있다. Observable(single) 자체로 구성된 리스트를 zip에 넣고, zip 내에서는 array로 받아 사용할 수 있다. 만약 Any타입으로 zip 내에서 사용되기 때문에 타입변환 등 타입에 대해 민감 할 경우 future를 사용하는 방법도 있다. 기존의 single 리스트를 toFuture시키면서 일괄 진행시키고, 합쳐야 될 상황에 get으로 비동기가 완료되고 반환된 값을 받아 처리할 수..
파일 다운로드 관련해서 DownloadManager를 사용할 수 도 있지만, 큰용량이 아닌 url로부터 단순 이미지를 받기 위해서는 상황에 따라 코드가 복잡하고 과할 수 도 있다. DownloadManager에 비해 Glide를 통한 방법으로 비교적 짧고 간단한 코드로 구현이 가능하다. Glide에 url을 넣어 진행시키고 완료되면 onResourceReady가 비동기로 호출되고 그 콜백 내에서 File을 생성, 변환 해주는 방법이다. 필자는 Rx에 병렬적으로 진행하기위해 Single타입으로 반환했으며 cache경로에 랜덤한 파일명으로 저장시켜 사용하였다. 상황에 맞게 알맞게 고쳐 사용하면 될 것같다. 위의 함수를 사용한 부분인데 single타입의 리스트를 zip에넣어 활용하였다 이미지 외의 다운로드, ..
[요약] 코틀린에서 리플랙션을 사용하면 KClass를 가지고 있다가 필요시 인스턴스화 할 수 있다. 다음과 같은 상황이 있다고 가정해보자(억지지만) 먼저 서버에서도 받아오고 다른대서도 공통으로 사용되는 데이터 클래스가 존재한다. 또한 특정 페이지에 공통으로 사용되는 프로퍼티들이 있어 타입별 enum으로 정의하여 사용한다. 공통으로 사용하는 페이지가 있고, 진입시 타입에 따라 알맞은 인스터스를 생성해 사용해야 한다. enum을 통해 분기를 타지 않고 사용할 수 있지만, 어쩔수 없이 인스터스 생성은 다음과같이 타입별로 if분기를 타서 정의한다. 지금은 분기가 크게 많지 않지만 타입이 3개가아니라 10개, 100개 if분기가 늘어날것이다 . 이런 분기를 없애기위해 enum으로 다른 분기는 제외시켰으나 인스턴스..
사이드 프로젝트 개발 도중에 sealed 클래스를 상속받은 클래스들을 라이브데이터 형식으로 관리하고 합쳐서 리사이클러뷰 아답터에 넘겨주는 형식으로 개발하였는다. liveData의 널체크와 리스트 합치는 과정에서 다음과 같은 코드가 구현됬었다. 위의 코드에서 두가지 사항이 불편했는데 라이브데이터 단일형식(LIveData과 리스트형식(LiveData)의 통합관리 불필요한 공통된 value의 널체크 두 사항을 보완하고자 유틸성 클래스를 하나 구현하였다. 해당 유틸성 클래스를 사용하면 라이브데이터의 단일형식과 리스트 형식을 따로 처리하지않고 유틸성 함수 내에서 타입에 맞춰 리스트화(혼합가능) liveData.value가 null일 경우 리스트에서 제외 위의 코드와 비교했을때 LiveDataUtil를 사용했을때 ..
사이드 프로젝트 도중 다형성을 이용해 생성된 리스트를 json을 서버에 주고 받을 상황이 생겼다. 일반적으로 한타입의 List를 json화 해봤었지만 다양한 타입을 json화, 객체화 해올 일이 없어 찾아보면서 한번 정리 해본다. 큰 방향은 하위 객체 json에 type key값을 두고 내부적으로 해당 key값을 통해 타입을 설정하는 것 같다. 이 방식을 통해서 다음 java 파일이 필요하다. https://github.com/google/gson/blob/master/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java google/gson A Java serialization/deserialization lib..
20.7.18 추가 Single 대신 Completable를 이용하면 완료 유무만 가져와 사용할 수 있다. 간혹 Json Body없이 단순히 200 코드남 반환해주는 코드를 접할때가 있다. 그럴 경우 다음처럼 처리하면 된다. 1. Response타입의 Observable 혹은 Single 을 통해 받은 후 2. rx의 subscribe 혹은 필요한 부분에서 반환 된 Response객체의 code()를 가져와 기대했던 resonse code와 비교