RxAndroid: создайте наблюдаемую, которая делает запрос и возвращает успех / ошибку на основе ответа - PullRequest
0 голосов
/ 04 июля 2018

Я хотел бы создать Observable на основе следующего сценария:

  1. На сервер сделан запрос
  2. Затем ответ добавляется в кэш.
  3. Если добавление в кэш выполняется только успешно, то ответ об успешном выполнении отправляется наблюдателю.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Вы можете сделать так, чтобы это работало -

makeServerRequest()
.subscribeOn(Schedulers.io())
.map(someResponse -> {
     if(saveTocache()) {
         return someResponse;
     } else {
         throw new RuntimeException("Error while saving to cache");
     }
})
.observeOn(AndroidSchedulers.io())
.subscribeWith(new Observer<SomeResponse> (){
    public void onError(Throwable error) {
        // here you will receive the runtime exception you throw.
    }
    :
    :
    :
});
0 голосов
/ 04 июля 2018

Во-первых, вы можете написать свой метод saveToCache со следующей логикой:

if (success) return response;
else return new EmptyResponse();

тогда ваш код RxJava может быть как

Observable.fromCallable(yourNetworkCall())
.map(response -> saveToCache(response))
.filter(result -> !result.isEmpty())
.subscribe(yourObserver)
...