2017-02-24 2 views
0

Ich versuche, zwei Anfragen mit der gleichen Observer zu beobachten. Mein Observer:Kombinieren Anfragen mit Retrofit2 und 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); 
    } 
}; 

Mein Wunsch ist eine Login-Anfrage mit Retrofit2 bauen:

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); 
} 

Jetzt möchte ich zwei oder mehr Anfragen starten und die Antworten eins nach dem anderen in onNext überprüfen, und wenn die letzte Anfrage wird überprüft, führen Sie onComplete mit meiner Observer. Könnte mir bitte jemand helfen?

Vielen Dank im Voraus.

+0

Was wollen Sie erreichen? Kombinieren der beiden Logging-Antwort? –

+0

Verwenden Sie etwas wie - doOnSubscribe, oder zwei Observables und kombinierenLatest? –

+0

Ich möchte 2 oder mehr Anfragen starten und die Antworten nacheinander in onNext überprüfen, und wenn die letzte Anfrage aktiviert ist, führe onComplete aus – Buntupana

Antwort

1

Sie suchen nach dem merge Betreiber:

Sie die Ausgabe von mehreren Observable kombinieren kann, so dass sie wie eine einzige beobachtbare handeln, durch den Merge-Operator.

ändern Sie Ihre Anfrage ein beobachtbares zurückzukehren:

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()) 
} 

Dann verschmelzen:

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