View
Rxjava 적용....
이번에 글은 Rxjava 적용을 하던 중 문제가 생겨서 4일동안 고민하고 별의 별 방법을 해보던 중 겨우 겨우 해결되어 글을 포스팅하게 되었다.(아..등잔 밑이 어두웠다. 솔직히.....)
자 그럼 무엇 때문에 내가 이렇게 고민을 하게 되었는지 알아보자
과연 무엇이 나를 이렇게 만들었는가?...(내 4일....)
일단 무엇인지 알기전에 글쓴이의 보험을 하나 깔고 갈까 한다. 나는 Rxjava를 많이 사용해보지 않았다. 누가 봤을 때 이게 무슨 Rxjava냐!!! 라고 하면 할 말이 없다. "나 Rxjava 응애~~ ㅠㅅㅠ" 그러니 Rxjava 괴물이라면 너그럽게 봐주길 바란다.
자 이제 진짜 알아보자
일단 나는 Rxjava를 통해서 api에서 호출한 데이터를 filter(필터링)해서 가져오고 싶었다. 간단히 말해서 ArrayList<A>의 A A객체 안에 ArrayList<B>가 있고 B객체 안에 ArrayList<A>가 있는데 이 c는 String 이다.
여기서 나는 특정 C 값에 따라서 B객체를 제거하고 싶었다. 이렇게 말하면 무슨 뜻인지 모를거 같아서 미흡한 그림판실력을 빌러서 그림으로 표현했다.
이제 조금 이해가 되길 바란다.
그리고 명칭을 조금 바꾸어 주겠다.
A -> ContentsCalendarResult
B -> RewardItemResult
c -> Time
자 다시 말하자면 나는 RewardItemResult객체안의 ArrayList<\Time>에서 특정 Time값에 따라서 RewardItemResult를 제거하거나 생존 시키고 싶은 것이다.
물론 for문을 이용해서 구현한다면 매우 쉬운일이다. 하지만 난 Rxjava의 함수를 이용해서 꼭하고 싶었다. 그래서 4일동안 map, flatMap 등등 있는 함수란 함수를 다 사용해서 시도 해봤다.
구조적은 어떻게 데이터를 내려야 해당 데이터가 바뀌고 내려올지, 어떤 데이터 타입을 반환해줄지, 진짜 내가 생각해 낼 수 있는 모든 것을 쥐어 짜서 수정하고 실행하고 결과 확인 하고를 다시 고치고를 3일동안 했다.
결국 안되었고 결국 4일째 나왔다.
해결...
정답은 의외로 간단했다. 심지어 시도해봤던 거였다. 바로 map()함수를 써서 변수로 수정된 데이터를 넣어주고 기존에 객체를 변경해주는 것이였다. 사실 이 방법도 썼었다. (처음에.... 근데 왜 안나온거냐고...)
private fun filterCalendarRewardItems(
contentsCalendarResults: ArrayList<ContentsCalendarResult>,
getDate: String
): Single<ArrayList<ContentsCalendarResult>> {
return Observable.fromIterable(contentsCalendarResults)
.map {
it.rewardItems = it.rewardItems.filter { rewardItemResult ->
filterStartTimes(rewardItemResult.startTimes,getDate)
} as ArrayList<RewardItemResult>
it
}.toList() as Single<ArrayList<ContentsCalendarResult>>
}
바로 같다.ㅇㅅㅇ;; 참 쉬운 부분이였는데....하....덕분에 배워간다.
다시 Rxjava함수에 대해서 공부하고 다음에는 Subject 클래스의 대해서 알아보려고 한다.:)
'TIL' 카테고리의 다른 글
RecyclerView (2) | 2024.02.28 |
---|---|
앱 아이콘 설정하기 (0) | 2024.02.23 |
이중 RecyclerView (0) | 2024.02.16 |
변수와 상수 (2) | 2024.02.14 |
자료형이란? (1) | 2024.02.13 |