/ / Як керувати результатами в RxJava з Retrofit - android, rx-java, retrofit2

Як керувати результатами в RxJava з Retrofit - android, rx-java, retrofit2

У мене є зворотний API запит API з RxJava. Все працює добре.

Як я можу оптимізувати цей код. Я новий з RxJava. Я був би вдячний за невеликий приклад коду або посилання. Дякую.

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();
}
}
});

Відповіді:

3 для відповіді № 1

Є кілька варіантів: карта, doOnNext, flatMap тощо, в залежності від того, що ви хочете зробити з модифікованим результатом пізніше. Наприклад:

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); });

або

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); });

або

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); });

0 для відповіді № 2

Нещодавно я опублікував деякі приклади використання RxJava (https://github.com/dawidgdanski/rx-java-handies) Якщо ви виявите це корисним під час вивчення API для ваших справ, я буду радий вам допомогти.