RxJava : Comment gérer l'erreur avec zip opérateur ?
Je suis en utilisant RxJava et RxAndroid avec Retrofit2.
Observable<ResponseOne> responseOneObservable = getRetrofitClient().getDataOne()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
Observable<ResponseTwo> responseTwoObservable = getRetrofitClient().getDataTwo()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
À l'aide de zip opérateur comme ci-dessous sur les deux ci-dessus de l'Observateur.
Observable<ArrayList<TestData>> testDataObservable = Observable.zip(responseOneObservable, responseTwoObservable, new Func2<ResponseOne, ResponseTwo, ArrayList<TestData>>() {
@Override
public ArrayList<TestData> call(ResponseOne responseOne, ResponseTwo responseTwo) {
ArrayList<TestData> testDataList = new ArrayList();
//Add test data from response responseOne & responseTwo
return testDataList;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<ArrayList<TestData>>() {
@Override
public void onNext(ArrayList<TestData> testDataList) {
}
@Override
public void onCompleted() {
Log.d(TAG, "onCompleted" );
}
@Override
public void onError(Throwable t) {
Log.d(TAG, "onError Throwable: " + t.toString() );
}
});
Si il y a une erreur se produit au cours de rénovation http appel dans responseOneObservable
et responseTwoObservable
puis il va appeler directement onError
méthode d'abonné de testDataObservable
.
Je veux continuer dans le zip de l'opérateur call
méthode, même si quelqu'un de deux observables a obtenu le succès de réponse.
Comment gérer l'erreur de réponse à l'aide de zip
opérateur ?
- Je crois
onErrorResumeNext
devrait vous permettre de le faire. - Savez-vous quoi faire si l'une des observables de retourner la valeur NULL? stackoverflow.com/questions/50334430/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
onErrorResumeNext
pour revenir certains Observables ouonErrorReturn
revenir à la valeur par défaut pourzip
, comme:Voir onError manutention pour plus d'info.
Mise à JOUR: Avec RxJava 2.0, vous devez utiliser
Function
au lieu deFunc1
:Ou à l'aide de lambda:
Ou à l'aide de Kotlin:
Vous pouvez retourner défaut de réponse à partir de deux observables avec
onErrorResumeNext
opérateur.Voir aussi La gestion des erreurs dans RxJava - Dan Lew
Vous devez utiliser
onErrorResumeNext
sur le seul zippé observables à l'instruction, émettant un élément par défaut en cas d'erreur.Reportez-vous à Gestion Des Erreurs-Opérateurs