Skip to content

Instantly share code, notes, and snippets.

@danylovolokh
Last active February 1, 2016 02:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save danylovolokh/0e0948f86b0e2565a298 to your computer and use it in GitHub Desktop.
Save danylovolokh/0e0948f86b0e2565a298 to your computer and use it in GitHub Desktop.
Server polling and retry operations when failed. With Retrofit and RxJava.
retryWhen(new Func1<Observable<? extends Throwable>, Observable<?>>() {
@Override
public Observable<?> call(Observable<? extends Throwable> observable) {
Log.v(TAG, "retryWhen, call");
return observable.compose(zipWithFlatMap());
}
}).repeatWhen(new Func1<Observable<? extends Void>, Observable<?>>() {
@Override
public Observable<?> call(Observable<? extends Void> observable) {
Log.v(TAG, "repeatWhen, call");
return observable.compose(zipWithFlatMap());
}
})
<T> Observable.Transformer<T, Long> zipWithFlatMap() {
return new Observable.Transformer<T, Long>() {
@Override
public Observable<Long> call(Observable<T> observable) {
return observable.zipWith(Observable.range(COUNTER_START, ATTEMPTS), new Func2<T, Integer, Integer>() {
@Override
public Integer call(T t, Integer repeatAttempt) {
Log.v(TAG, "zipWith, call, repeatAttempt " + repeatAttempt);
return repeatAttempt;
}
}).flatMap(new Func1<Integer, Observable<Long>>() {
@Override
public Observable<Long> call(Integer repeatAttempt) {
Log.v(TAG, "flatMap, call, repeatAttempt " + repeatAttempt);
// increase the waiting time
return Observable.timer(repeatAttempt * 5, TimeUnit.SECONDS);
}
});
}
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment