Rx 사용하면서 추가하거나 공부한 내용

rx 라이브러리를 사용하면서 사용하는 함수들

  • 간단하게 성남도서관 검색 앱을 개발하면서 사용하는 함수들 입니다.
  • rxbiding 사용법

0. 목적

  • 클린 + MVP + RX 를 사용하면서 익숙해지기
  • 뷰에서는 이벤트에 대한 처리와 보여주는것만 처리
  • 프리젠터에서는 유즈케이스를 이용한 API 접근
  • 유즈케이스 옵저버를 반환
  • 이로 인해서 구조가 무너지지 않은걸로 생각함

1. rxbiding

  • 각종 view 들의 이벤트를 옵저버로 형태로 변환하여 편하게 사용 가능함
  • https://github.com/JakeWharton/RxBinding
    • 안드로이드 UI 위젯 사용을 위한 플랫폼
  • 현재 사용을 위하여 추가한 라이브러리

    compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
    compile 'com.jakewharton.rxbinding2:rxbinding-recyclerview-v7:2.0.0'
    
  • 사용은 연속 클릭 방지를 위해서 사용하였습니다. API 호출 까지 한번에 사용하면 좋을거 mvp 를 적용중이라 구조가 무너져서 사용 안하기로함
  • 연속 클릭 방지를 위한 RxBiding 사용
    • 뷰의 클릭에 사용할 버튼뷰를 넘기고
    • throttleFirst(1, TimeUnit.SECONDS) : (첫번쩨 이벤트를 실행후 1초이내로 들어오는 다른 이벤트는 버린다.)
    • throttleLast(1, TimeUnit.SECONDS) : 1초 동안 들어오는 이벤트중 마지막 이베트늘 실행

        RxView.clicks(btnUseRxCallBack)
          .throttleFirst(1, TimeUnit.SECONDS)
          .observeOn(AndroidSchedulers.mainThread())
          .subscribe(
                  o -> mPresenter.clickedSearch(editText.getText().toString()),
                  error->Log.e("error",error.toString()));
      

2. 사용중인 RX 함수

  • filter
    • 아래 처럼 문자열이 있을때만 필터링을 추가할 수 있다. true 일때만 다음으로

        Observable.just(query)
          .filter(text -> !TextUtils.isEmpty(text))
      
  • map
    • 입력으로 들어 오는 값을 변경 할 수 있다. 다음으로 전달되는 문자열은 간장공장+query

        Observable.just(query)
          .map(text -> "간장공장"+text)
      
  • zip
    • 이걸 몰라서 한참 걸렸습니다.
    • 이름의 느낌 처럼 압축 하는 느낌입니다.
    • 일단 사용 코드 입니다.

        Observable.zip(
          Observable.just(query),
          Observable.just(requestPage),
          (queryText,requestPageText) -> Log.d("phkim","query: "+queryText + "requestPage:"+requestPageText))
      
    • 문자열 하나씩 입력되면 동식에 사용 가능하도록 변경해 줍니다.
    • 배열이 들어가서 하나씩 연속으로 사용하는게 아닌 동시에 사용 가능합니다.
  • flatMap
    • 결과를 옵저버 형태로 반환합니다.
    • 다른 옵저버와 합칠때 사용합니다.
    • 코드를 추가 하기에는 양이 너무 길어 져서
    • 옵저버 A , 옵저버 B
    • 실행중인 옵저버 A 스트림에 옵저버 B 를 추가 할 수 있습니다.
    • 콜백에 콜백을 처리할때 사용하기 좋습니다.
    • 예를 들어서 소셜 로그인 처리 할때 사용 하면 됩니다.
      • 페이스북 로그인 -> 콜백으로 결과 -> 사용하는 서버로 결과 전달 -> 페이스북과 사용중인 서버 로그인 완료
      • 위와 같은 내요을 콜백에서 콜백을 호출하는 형태를 조금이나마 줄일 수 있다

PyeongHo

즐겁게 또 즐겁게