Ich bin mit RxJava2 arbeiten und ich war einfache Anfrage zu machen, ich soll es wie das nächste Beispiel tun:Wie führe ich einen Throwable Call in einer FlatMap in RxJava2 durch?
getCompositeDisposable().add(subscriptionManager.getSubscriptions(getUserAuth().getToken()).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<HttpCustomRes<List<GetSubscriptions>>>() {
@Override
public void accept(@NonNull HttpCustomRes<List<GetSubscriptions>> listHttpCustomRes) throws Exception {
getMvpView().hideLoading();
ErrorCode errorCaught = bypassForErrors(listHttpCustomRes.getError());
if(errorCaught.equals(ErrorCode.SUCCESSFUL_REPSONSE))
getMvpView().showSubscriptions(listHttpCustomRes.getData());
else if(errorCaught.equals(ErrorCode.INVALID_TOKEN) || errorCaught.equals(ErrorCode.NULL_TOKEN))
getMvpView().showLogin();
else
getMvpView().showErrorDialog();
}
}, new Consumer<Throwable>() {
@Override
public void accept(@NonNull Throwable throwable) throws Exception {
getMvpView().hideLoading();
getMvpView().showErrorDialog();
}
}));
Nun, ich brauche zwei aufeinanderfolgende Anforderung zu tun, so dass ich den flatMap mit tun Dies. In der einfachen Anfrage habe ich den zweiten Aufruf der Methode neuer Consumer, um Fehler zu erkennen, aber mit der FlatMap weiß ich nicht wie ich das machen soll. Ich poste den Code in den nächsten Zeilen.
getCompositeDisposable().add(accountUserManager.getUserData(getUserAuth().getToken()).flatMap(new Function<UserData, Flowable<HttpCustomRes<List<GetSubscriptions>>>>() {
@Override
public Flowable<HttpCustomRes<List<GetSubscriptions>>> apply(@NonNull UserData userData) throws Exception {
setUserData(userData);
return subscriptionManager.getSubscriptions(getUserAuth().getToken());
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<HttpCustomRes<List<GetSubscriptions>>>() {
@Override
public void accept(@NonNull HttpCustomRes<List<GetSubscriptions>> listHttpCustomRes) throws Exception {
getMvpView().hideLoading();
ErrorCode errorCaught = bypassForErrors(listHttpCustomRes.getError());
if(errorCaught.equals(ErrorCode.SUCCESSFUL_REPSONSE))
getMvpView().showSubscriptions(listHttpCustomRes.getData());
else if(errorCaught.equals(ErrorCode.INVALID_TOKEN) || errorCaught.equals(ErrorCode.NULL_TOKEN))
getMvpView().showLogin();
else
getMvpView().showErrorDialog();
}
}, new Consumer<Throwable>() {
@Override
public void accept(@NonNull Throwable throwable) throws Exception {
getMvpView().hideLoading();
getMvpView().showErrorDialog();
}
})
);
Wie Sie sehen können, habe ich eine throwable in der zweiten Methode, aber nicht in dem ersten, so dass, wenn der ersten Absturz, die App wird auch zum Absturz bringen. Wie kann ich das Throwable auf die erste Anfrage umsetzen?
Vielen Dank.
Dann ist mein Code gut aufgebaut? Also wird der zweite Verbraucher, der das Throwable erweitert, mit den beiden möglichen Fehlern umgehen? Es ist, was ich verstehe. – MAOL
Ja, das stimmt – yosriz