Kette zwei nachrüstbare Observables mit RxJava

Ich möchte 2 Netzwerkanrufe nacheinander ausführen. Beide Netzwerkanrufe geben Observable zurück. Zweiter Aufruf verwendet Daten vom erfolgreichen Ergebnis des ersten Aufrufs, Methode im erfolgreichen Ergebnis des zweiten Aufrufs verwendet Daten vombeid Erfolgreiches Ergebnis des ersten und des zweiten Aufrufs. Ich sollte auch in der Lage sein, mit @ umzugehbeid onError "Ereignisse" anders. Wie kann ich dieses Vermeiden der Rückrufhölle wie im folgenden Beispiel erreichen:

       API().auth(email, password)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Action1<AuthResponse>() {
                @Override
                public void call(final AuthResponse authResponse) {
                    API().getUser(authResponse.getAccessToken())
                            .subscribe(new Action1<List<User>>() {
                                @Override
                                public void call(List<User> users) {
                                    doSomething(authResponse, users);
                                }
                            }, new Action1<Throwable>() {
                                @Override
                                public void call(Throwable throwable) {
                                    onErrorGetUser();
                                }
                            });
                }
            }, new Action1<Throwable>() {
                @Override
                public void call(Throwable throwable) {
                    onErrorAuth();
                }
            });

Ich weiß über zip, aber ich möchtevermeide Erstellen der "Combiner-Klasse".

Update 1. Versucht, Akarnokds Antwort zu implementieren:

         API()
            .auth(email, password)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .flatMap(authResponse -> API()
                    .getUser(authResponse.getAccessToken())
                    .doOnError(throwable -> {
                        getView().setError(processFail(throwable));
                    }), ((authResponse, users) -> {
                // Ensure returned user is the which was authenticated
                if (authResponse.getUserId().equals(users.get(0).getId())) {
                    SessionManager.getInstance().initSession(email, password, authResponse.getAccessToken(), users.get(0));
                    getView().toNews();
                } else {
                    getView().setError(R.string.something_went_wrong);
                }
            }));

Jedoch drinnenflatMap method compiler meldet, dass Methoden von authResponse und users (@ nicht aufgelöst werden könnauthResponse.getAccessToken(), users.get(0) etc). Ich bin neu in der RX-Programmierung und Lambdas - bitte sagen Sie mir, was das Problem ist. Trotzdem sieht der Code jetzt viel sauberer aus.

Update 2.

API()
            .auth(email, password)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .doOnError(throwable -> getView().setError(processFail(throwable)))
            .flatMap((AuthResponse authResponse) -> API()
                    .getUser(authResponse.getAccessToken())
                    .doOnError(throwable -> getView().setError(processFail(throwable))), ((AuthResponse authResponse, List<User> users) -> {
                            // Ensure returned user is the which was authenticated
                            if (authResponse.getUserId().equals(users.get(0).getId())) {
                                SessionManager.getInstance().initSession(email, password, authResponse.getAccessToken(), users.get(0));
                                getView().toNews();
                            }
                            return Observable.just(this);
            }));

Habe es so gemacht, aber jetzt werden meine Netzwerkanrufe überhaupt nicht ausgeführt.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage