Hello.
I'm really new to Rx but excited about using it to simplify some of my Android async code. In one of my apps I have to refresh the oauth token before making certain calls. I want to be able to refresh the token, save it/update UI, and then continue with the original request.
Currently what I have does everything except update the UI (since the subscriber is running on a background thread).
private final Observable<RefreshResponse> loginObservable = Observable.create(new Observable.OnSubscribeFunc<RefreshResponse >() {
@Override
public Subscription onSubscribe(Observer<? super RefreshResponse > observer) {
try {
RefreshResponse refreshResponse = mAuthService.getAccessToken(refreshToken, "refresh_token");
processRefreshResponse(refreshResponse);
observer.onNext(refreshResponse);
observer.onCompleted();
} catch (Exception e) {
observer.onError(e);
}
}
return Subscriptions.empty();
}
});
loginObservable.subscribeOn(Schedulers.newThread()).flatMap(new Func1<RefreshResponse, Observable<GalleryResponse>>() {
@Override
public Observable<GalleryResponse> call(final RefreshResponse refreshResponse) {
return Observable.create(new Observable.OnSubscribeFunc<GalleryResponse>() {
@Override
public Subscription onSubscribe(Observer<? super GalleryResponse> observer) {
try {
GalleryResponse response = mGalleryService.getGallery(refreshResponse.refresh_token, section, sort, currentPage);
observer.onNext(response);
observer.onCompleted();
} catch (Exception e) {
observer.onError(e);
}
return Subscriptions.empty();
}
});
}
}).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<GalleryResponse>() {
@Override
public void call(GalleryResponse galleryResponse) {
mBus.post(new DefaultGalleryEvent(galleryResponse));
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable error) {
processError(error);
}
}
);
The code looks really complicated for what I am trying to do so I'm sure that there is a better/simpler way.
Thanks in advance.