2017-02-24 49 views
0

我試圖用相同的Observer觀察兩個請求。我Observer將請求與Retrofit2和RxJava2結合使用

private BaseObserver<LoginResponse> loginObserver = new BaseObserver<LoginResponse>(this) { 
    @Override 
    public void onSubscribe(Disposable d) { 
     super.onSubscribe(d); 
     showLoading(true); 
     Log.d(TAG, "onSubscribe: "); 
    } 

    @Override 
    public void onNext(LoginResponse response) { 
     super.onNext(response); 
     Log.d(TAG, "onNext: "); 
    } 

    @Override 
    public void onComplete() { 
     super.onComplete(); 
     showLoading(false); 
     Log.d(TAG, "onComplete: "); 
    } 

    @Override 
    public void onError(Throwable e) { 
     super.onError(e); 
     showLoading(false); 
    } 
}; 

我的請求是登錄請求與Retrofit2建設:

private void sendRequest(String username, String password) { 
    IResourceAPI iResourceAPI = RetrofitClient.createIResourceClient(this); 
    iResourceAPI.login(new LoginRequest(username, password)) 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribeWith(loginObserver); 
} 

現在我要推出2個或更多的請求,並檢查在onNext一個答覆一個,並在最後一個要求被檢查執行onComplete與我的Observer。任何人都可以幫助我嗎?

在此先感謝。

+0

什麼你想達到什麼目的?結合兩個日誌記錄響應? –

+0

使用類似 - doOnSubscribe,或兩個observables和combineLatest? –

+0

我想要啓動2個或更多的請求並在onNext中逐個檢查響應,並且當最後一個請求被選中時執行onComplete – Buntupana

回答

1

您正在尋找的merge操作:

,它們的作用 像一個單一可觀察,通過合併運營商可以結合多種觀測量的輸出。

只需修改您的請求返回可觀察到的:

private Observable<LoginResponse> request(String username, String password) { 
    IResourceAPI iResourceAPI = RetrofitClient.createIResourceClient(this); 
    iResourceAPI.login(new LoginRequest(username, password)) 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
} 

然後合併:

Observable.merge<LoginResponse>(request(...), request(...)) 
    .subscribeWith(loginObserver); 
1

這聽起來像你正在尋找merge運營商。

相關問題