RxJava无限流最佳实践

时间:2015-03-18 17:23:39

标签: android rx-java

在Android应用程序中我有这种情况:

使用observable收听我的editText:

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

然后我需要发送带有observable发出的字符串的网络请求:

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

我的问题是:什么是编写这些网络结果的无限流的最佳方式。 UI处理的错误。

使用AppObservable.bindActivity()包装器取消订阅

我最终将materialize()运算符附加到网络可观察对象,然后像处理它一样处理它:

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

你知道更好的方式,还是它很好? 至少它有效。

P.S。另一个有用的案例是刷新按钮点击flatMap&#to ed to network calls

1 个答案:

答案 0 :(得分:1)

您可以使用onErrorResumeNext从失败中恢复Observable。如,

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