2016-06-30 5 views
1

사용자는 구독하는 주제에 따라 알림을받을 수있는 앱을 가지고 있습니다. 워크 플로는 다음과 같습니다 : 실행 중 RxJava 스트림 수정하기

  • 사용자가 다양한 주제

  • 내가 원하는에서 탈퇴/가입하도록 선택 통지 서버에
  • 응용 레지스터에

    1. 사용자 로그를 모든 네트워크 요청 직렬화된다. 나는 정확한 주제/탈퇴 가입 할려고하고있는 무슨 초기에 알았다면, 나는 스트림 아래와 같이 쓸 수있다 :

      loginObservable.subscribeOn(Schedulers.io()) 
            .flatMap(user -> registerApp(appId)) 
            .flatMap(o -> subscribeToTopic("topic1")) 
            .flatMap(o -> unsubscribeFromTopic("topic2")) 
            .observeOn(AndroidSchedulers.mainThread()) 
            .subscribe() 
      

      것은 사용자도 가능, 응용 프로그램 수명주기의 모든 지점에서/탈퇴를 구독 할 수 있다는 것입니다 등록이 성공하기 전에. 내가 관찰 할 수있는 목록을 유지하고 onComplete()에 손으로 모든 요청을 직렬화 할 수는 있지만 매우 Rx-ish로 들리지는 않습니다. 내가 더 간결한 방법으로 그것을 할 수있는 기회? 다음과 같이 입력하십시오 :

      observable = loginObservable.subscribeOn(Schedulers.io()) 
            .flatMap(user -> registerApp(appId)) 
            .observeOn(AndroidSchedulers.mainThread()) 
            .subscribe() 
      
          //later 
          observable.flatMap(o -> subscribeToTopic("topic1")) 
            .subscribe() 
      
          //even later 
          observable.flatMap(o -> unsubscribeFromTopic("topic2")) 
            .subscribe() 
      
  • 답변

    0

    doOnSubscribe는 어떻게 사용합니까? 주제가 게시되기 전에 앱을 등록 할 수있는 위치.

    이 예제를 살펴보십시오.

    boolean onSubscribe = false; 
    
    @Test 
    public void observableDoOnSubscribe() { 
        String val = "test"; 
        Observable.just(val) 
           .doOnSubscribe(() -> onSubscribe = true) 
           .filter(s -> onSubscribe) 
           .subscribe(s -> System.out.printf(s)); 
    } 
    

    당신은 당신이 PublishSubject를 통해 관찰에 새로운 주제를 소개 할 수 여기에 더 많은 예제 https://github.com/politrons/reactive

    0

    을 볼 수 있습니다. 나는 당신의 예에서 switchMap의 사용을 이해하지 않은하지만이 방법은 당신에게 도움이 될 수 있습니다 switchMap``에 대한

    newTopics.onNext(topic); 
    
    +0

    필요가 없습니다 사실, 난 그냥 질문을 편집 : UI의 상호 작용이

    PublishSubject<Topic> newTopics = PublishSubject.create(); Observable<Topic> topics = ...; newTopics .mergeWith(topics) .flatMap(topic -> subscribeToTopic(topic)) ... .subscribe(subscriber); 

    'switchMap'을'flatMap'으로 대체하십시오. – mbonnin

    +0

    앱이 알림 서비스에 등록되기 전에 발생하는 UI 상호 작용을 처리합니까? 나는 ReplaySubject를 사용할 생각이었다. – mbonnin