I have a Retrofit request API call with RxJava. All works well.
How I can optimise this code. I'm a new one with RxJava. I would be grateful for a small example code or link. Thanks.
Observable<Review> observer = Observable.just(review);
observer.subscribeOn(Schedulers.newThread())
.observeOn(Schedulers.newThread())
.map(new Func1<Review, Uri>() {
@Override
public Uri call(Review review) {
Uri uri = null;
/// Some code
return uri;
}
}).subscribe(new Action1<Uri>() {
@Override
public void call(Uri uri) {
if(uri != null) {
Api.Reviews reviewApi = retrofit.create(Api.Reviews.class);
Observable<BaseResponse<Review>> reviews = reviewApi.createReview(authToken, review);
reviews.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.map(new Func1<BaseResponse<Review>, Void>(){
@Override
public Void call(BaseResponse<Review> response) {
//Code Here
return null;
}
}).subscribe();
}
}
});
There are a few options: map, doOnNext, flatMap, etc., depending on what do you want to do with the retrofit result afterwards. For example:
reviews
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.map(r -> {
try {
someDB.save(r);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
return r;
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(v -> { }, e -> { log(e); });
or
reviews
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.doOnNext(r -> {
try {
someDB.save(r);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(v -> { }, e -> { log(e); });
or
reviews
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.flatMap(r -> {
try {
someDB.save(r);
return Observable.empty(); // or Observable.just(r);
} catch (Exception ex) {
return Observable.error(ex);
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(v -> { }, e -> { log(e); });
Recently I've published some examples of RxJava usage ( https://github.com/dawidgdanski/rx-java-handies ). If you find it useful while investigating the API for your cases I'll be glad to help you out.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.