2015-11-09 7 views
1

Предположим, я хочу показать некоторые пользовательские данные, которые находятся на сервере. Я бы поискал сервер, кешировал его, а затем представлял его пользователю. Так что мой intial код RxJava будет выглядеть примерно так:Как вы связываете несколько наблюдаемых?

ApiClient.getUser(userId), //An Observable that will spit out a UserResponse 
    .subscribeOn(Schedulers.io()) //for the API observable (Do i need this?) 
    .flatMap(new Func1<UserResponse, Observable<DatabasePutResult>>() { 
      @Override 
      public Observable<DatabasePutResult> call(UserResponse response) { 
       return Database.cacheUser(response); 
      } 
      }) 
    .subscribeOn(Schedulers.io()) //for the database observable 
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribe(//handle DatabasePutResult object in onNext()); 

Теперь у меня есть два вопроса.

  1. Это правильный способ соединения двух наблюдаемых? Если нет, как я должен это делать?
  2. Если бы я хотел обработать onError для Наблюдаемого Апи, мог бы я как-то его поддерживать, сохраняя цепочку? Если нет, то каков наилучший способ сделать это? Действительно ли мне нужно разделить цепочку на два набора вызовов RxJava?

ответ

1
  1. Вам не нужно это:

.subscribeOn(Schedulers.io()) //for the API observable (Do i need this?)

Если вас интересует, вы можете проверить идентификатор текущего потока с помощью этого кода:

Thread.currentThread().getId();
Все остальное хорошо.

  1. Вы должны посмотреть: Error-Handling-Operators. В этом случае я бы посоветовал более подробно рассмотреть onErrorResumeNext( )

Надеюсь, это будет полезно.

+0

поэтому, если я понимаю это право, я должен использовать 'onErrorResumeNext()', если я хочу попробовать аналогичный, но другой наблюдаемый (другой наблюдаемый, который испускает один и тот же вывод), но если я хочу обработать эту ошибку наблюдаемого, я могу сделайте это в 'onError()' внутри подписки, проверив 'if (e instanceof SomeException)' – Sree

+0

Полностью правильно. –

+0

А если у вас есть две наблюдаемые, которые испускают одно и то же Исключение. Например, что, если бы у меня был сетевой вызов и на основе этого результата, я делаю другой сетевой вызов. Оба могут испускать HttpException. Вы не можете использовать 'if (e instanceof SomeException)'. Что бы вы предложили в этом сенарио? – Sree

Смежные вопросы