2017-04-10 5 views
1

私のコードに2つの観測値があります。最初のものは、検索ボタンのクリックとテキストの変更のためのマージされたオブザーバブルです。rxjava2で観測値を連結する方法

Observable<String> buttonClickStream = createButtonClickObservable(); 
Observable<String> textChangeStream = createTextChangeObservable(); 
Observable<String> searchTextObservable 
    =Observable.merge(buttonClickStream,textChangeStream); 

disposable = searchTextObservable 
    .observeOn(AndroidSchedulers.mainThread()) 
    .doOnNext(s -> showProgressBar()) 
    .observeOn(Schedulers.io()) 
    .map(this::getStarredRepos) 
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribe(gitHubRepos -> { 
     hideProgressBar(); 
     showResults(gitHubRepos); 
    }); 

観察第二は、サーバからの応答を取得するためのものである:

private List<GitHubRepo> getStarredRepos(String username) { 
    RestInterface restService=RestService 
     .getClient().create(RestInterface.class); 
    restService.getStarredRepos(username) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribeOn(Schedulers.io()) 
     .subscribe(this::handleResponse, this::handleError); 

    return repoList; 
} 

今問題は、hideProgressBar(IS)とshowResults()メソッドは、のhandleResponse()終了する前に実行されます。

私はRxJavaを初めて使用しています。そのため、コードに問題があれば修正してください。

答えて

1

List<GitHubRepo> getStarredRepos(...)は、代わりにObservable<List<GitHubRepo>> getStarredRepos(...)である必要があります。このメソッドの観測可能な部分を購読しないでください。ただし、restServiceから取得した観測値を返してください(返信する前にmap()を入れてください。エラーの場合はonErrorReturn()などが必要です)。

次に、.map(this::getStarredRepos)の代わりに.switchMap(this::getStarredRepos)の代わりに。

+0

ありがとうございます。 – Yogesh

関連する問題