public static <T, R extends T> SingleTransformer<T, T> with(final Single<R> other) { return source -> source.onErrorResumeNext(getThrowableMapper(other)); }
private static <R> Function<Throwable, R> getThrowableMapper(R other) { return throwable -> { if(shouldPropagateThrowable(throwable)) { throw Exceptions.propagate(throwable); } return other; }; }
void getFitnessData() { fitnessSessionDataList.clear(); view.showLoading(); DataReadRequest.Builder dataReadRequestBuilder = getDataReadRequestBuilder(); DataReadRequest dataReadRequest = dataReadRequestBuilder.build(); DataReadRequest dataReadRequestServer = dataReadRequestBuilder.enableServerQueries().build(); // First, request all data from the server. If there is an error (e.g. timeout), // switch to normal request disposable.add( rxFit.history().readBuckets(dataReadRequestServer) .doOnError(throwable -> { if(throwable instanceof StatusException && ((StatusException)throwable).getStatus().getStatusCode() == CommonStatusCodes.TIMEOUT) Log.e("MainActivity", "Timeout on server query request", throwable); }) .compose(RxFitOnExceptionResumeNext.with(rxFit.history().readBuckets(dataReadRequest))) .subscribeOn(Schedulers.computation()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(this::onBucketLoaded, this::onBucketLoadError, () -> view.onFitnessSessionDataLoaded(fitnessSessionDataList)) ); }
@Test public void CheckConnectionCompletable_Resolution_Success_ResumeNext_Error() { ConnectionResult connectionResult = Mockito.mock(ConnectionResult.class); final CheckConnectionObservable observable = PowerMockito.spy(new CheckConnectionObservable(rxFit)); setupBaseObservableResolution(observable, apiClient); TestObserver<Void> sub = Completable.fromObservable(Observable.create(observable).compose(RxFitOnExceptionResumeNext.with(Observable.empty()))).test(); doAnswer(invocation -> { observable.onGoogleApiClientReady(apiClient, getSubscriber(observable, apiClient)); return null; }).when(apiClient).connect(); Error error = new Error("Generic error"); doThrow(error).when(observable).onGoogleApiClientReady(Matchers.any(GoogleApiClient.class), Matchers.any(ObservableEmitter.class)); BaseObservable.onResolutionResult(Activity.RESULT_OK, connectionResult); sub.assertError(throwable -> ((CompositeException)throwable).getExceptions().get(0) == error); sub.assertNoValues(); }
@Test public void CheckConnectionCompletable_Resolution_Error_ResumeNext_Resolution_Success() { ConnectionResult connectionResult = Mockito.mock(ConnectionResult.class); final CheckConnectionObservable observable = PowerMockito.spy(new CheckConnectionObservable(rxFit)); setupBaseObservableResolution(observable, apiClient); TestObserver<Void> sub = Completable.fromObservable(Observable.create(observable).compose(RxFitOnExceptionResumeNext.with(Observable.empty()))).test(); when(connectionResult.hasResolution()).thenReturn(true); BaseObservable.onResolutionResult(Activity.RESULT_CANCELED, connectionResult); sub.assertError(throwable -> ((CompositeException)throwable).getExceptions().get(0) instanceof GoogleAPIConnectionException); sub.assertNoValues(); }
public static <T, R extends T> ObservableTransformer<T, T> with(final Observable<R> other) { return source -> source.onErrorResumeNext(getThrowableMapper(other)); }
@Test public void CheckConnectionCompletable_Resolution_Error_ResumeNext_NoResolution_Success() { ConnectionResult connectionResult = Mockito.mock(ConnectionResult.class); final CheckConnectionObservable observable = PowerMockito.spy(new CheckConnectionObservable(rxFit)); setupBaseObservableResolution(observable, apiClient); TestObserver<Void> sub = Completable.fromObservable(Observable.create(observable).compose(RxFitOnExceptionResumeNext.with(Observable.empty()))).test(); when(connectionResult.hasResolution()).thenReturn(false); BaseObservable.onResolutionResult(Activity.RESULT_CANCELED, connectionResult); sub.assertComplete(); sub.assertNoValues(); }