J'ai une chaîne d'appels à l'Internet, à la base de données et, comme résultat, je montre les informations collectées à l'utilisateur. Maintenant, j'ai un flux RxJava imbriqué à 3 niveaux très laid. Je veux vraiment le rendre lisse et facile à lire, mais j'ai eu beaucoup de mal.
J'ai déjà lu tout ce qui concerne Map, flatMap, zip, etc. Je n'arrive pas à faire fonctionner les choses ensemble.
Code : faire un appel api. Les informations reçues sont placées dans la base de données et souscrivent à un autre flux dans la méthode onSuccess du premier flux, et dans la méthode onSuccess du second flux reçu de la base de données, les informations sont finalement affichées à l'utilisateur.
Dat Frankenstein :
disposables.add(modelManager.apiCall()
.subscribeOn(Schedulers.io())
.observeOn(mainThread)
.subscribeWith(new DisposableSingleObserver {
public void onSuccess(ApiResponse apiResponse) {
modelManager.storeInDatabase(apiResponse)
//level 1 nested stream:
disposables.add(modelManager.loadFromDatabas()
.subscribeOn(Schedulers.io())
.observeOn(mainThread)
.subscribeWith(new DisposableSingleObserver{
public void onSuccess(Data data) {
view.showData(data);
}
public void onError(Throwable e) {
}
}));
}
@Override
public void onError(Throwable e) {
}
}));
}