2015-03-18 3 views
0

В Android App У меня есть этот случай:RxJava бесконечный поток наилучшей практики

Слушайте мой EditText с наблюдаемыми:

WidgetObservable.text(myEditText, false) 
    .map { it.text().toString() } 
    .debounce(800, TimeUnit.MILLISECONDS, Schedulers.io()) 

Тогда мне нужно отправить запрос сети шпагатом, испускаемого наблюдаемым:

.flatMap { networkObservable.subscribeOn(Schedulers.io()) } 

Мой вопрос: что является наилучшим возможным способом записи бесконечного потока этих сетевых результатов. Ошибки, обрабатываемые пользовательским интерфейсом.

отписку сделаны с AppObservable.bindActivity() оберткой

Я в конечном итоге прикреплением материализовать оператор() к сети наблюдаемого, а затем обработать его любит:

.subscribe{ 
      when (it.getKind()) { 
      Kind.OnNext -> text.setText(it.getValue()) 
      Kind.OnError -> text.setText(it.getThrowable().getMessage()) 
      } 
    } 

Вы знаете лучший путь, или его просто хорошо? По крайней мере, он работает.

P.S. другим полезным случаем будет щелчок кнопки Refresh flatMap'ed к сетевым вызовам

ответ

1

Вы можете использовать onErrorResumeNext для восстановления вашего наблюдаемого от сбоя. Например,

WidgetObservable.text(myEditText, false) 
    .map { it.text().toString() } 
    .debounce(800, TimeUnit.MILLISECONDS, Schedulers.io()) 
    .flatMap { 
      networkObservable.subscribeOn(Schedulers.io()) 
          .onErrorResumeNext(t -> t.getMessage()) 
    } 
+0

Это означает, что мне нужен какой-либо объект-оболочка, содержащий нормальное состояние и состояние ошибки, которое будет испускаться после преобразования flatMap? С точки зрения удобочитаемости и накладных расходов, кажется, мое решение лучше. Нет? –

+0

Вы также можете использовать 'onErrorResumeNext' во внешнем Observable, а не в flatMap. – zsxwing

+0

Спасибо большое! Я понимаю этот подход. Если кто-то знает другие, отправьте новые ответы, пожалуйста! –

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