2016-12-24 3 views
1

switchMap 연산자의 다른 반송 형태를 처리하고 난들을 필터링 및 I에 기초하여 엔드 포인트 (Retrofit를 사용하여) 네트워크 요구를 실행 switchMap()에게 전달 RxTextViewtextChangeEvents() 활용 여기서 I는 케이스를 가지고 또 다른 가치.I가 <code>RxBinding</code>를 사용

TL; DR :

switchMap(new Func1<TextViewTextChangeEvent, Observable<List<String>>>() { 
       @Override 
       public Observable<List<String>> call(TextViewTextChangeEvent textViewTextChangeEvent) { 

        switch (visibleTab) { 
         case TAGS: 
          return presenter.executeSearchPostsByTag(searchBarText, String.valueOf(0)); 
         case PEOPLE: 
          return presenter.executeSearchPostsByPeople(searchBarText, String.valueOf(0)); 
         case COMPANIES: 
          return presenter.executeSearchPostsByCompanies(searchBarText, String.valueOf(0)); 
         case JOBS: 
          return presenter.executeSearchPostsByJobs(searchBarText, String.valueOf(0)); 
         default: 
          return presenter.executeSearchPostsByTag(searchBarText, String.valueOf(0)); 
        } 

       } 
      }) 

하지만 난 반환 형식으로 가질 수 없습니다 : Observable<List<String>>을 나는 각 요청에서 다른 오브젝트를받을 수 있기 때문이다.

어떻게해야합니까?

+0

없습니다 반납

주? 데이터를 다른 구성 요소로 전달하고 있습니까? – Kiskae

+0

@Kiskae 아니요, 저는 데이터를 받아 들일 수 있도록 그들을 섭취 할 수 있습니다. – Mes

답변

3

한 가지 방법은 중도 Completable 변형을 사용하여 모든 요소를 ​​버리고 onComplete 호출을 기다리는 것입니다.

.toCompletable().<Void>toObservable()을 입력하여 대신 Observable<Void>으로 출력을 설정하십시오. 이 작업을 완료하면 요소가 방출되지 않으므로 유형 안정성이 보장되므로 작동합니다.

출력 할 수있는 또 다른 옵션은 출력을 Observable<?>으로 선언하는 것입니다. 그러나 이러한 와일드 카드로 인해 제네릭에 이상한 문제가 발생할 수 있습니다. 당신이 RxJava 2를 사용하는 경우, 다음 호출이 요소를 무시하고 그냥 아무것도 당신이 반환 유형이 있지만이 될 원하는 작업 .ignoreElements().<Void>toObservable()

+0

멋지다. 나는 .toCompletable()을 몰랐다. toObservable()' 내가 그것을 시도하자 그리고 당신에게 알려 드리겠습니다. – Mes

+0

작동 중! 완전한!! 감사!! – Mes

+0

이 접근법의 문제점은 항목이 방출되지 않아 구독자에 대한 응답을 사용할 수 없다는 것입니다. – Mes

관련 문제