RxAndroid / RxLifeCycle – 处理处理onError而不是onComplete

我正在尝试将RxLifeCycle实现到与RxJava联网中。 我一直在使用Consumer一个子Consumer ,但是对于RxLifeCycle ,你需要处理onError 。 所以我已经转移到Observer

这个问题是,当调用被处置时,它调用onComplete而不是onError ,我更喜欢。

buildle.gradle:

  // RxJava compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0.3' compile 'com.trello.rxlifecycle2:rxlifecycle-kotlin:2.2.1' compile 'com.trello.rxlifecycle2:rxlifecycle-android-lifecycle-kotlin:2.2.1' 

我以前的NetworkConsumer是这样构建的,我会处理accept所有结果。

NetworkConsumer:

 abstract class NetworkConsumer : Consumer<NetworkResponse> { @Throws(Exception::class) override fun accept(response: NetworkResponse) { ... } // to override open fun onSuccess(response: T) {} open fun onComplete() {} } 

我的网络电话都使用Single结构化。

 fun getFavorites(): Single<NetworkResponse<Array>> 

我正在使用它。

 service.getFavorites(...) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(object : NetworkConsumer<Array>() { override fun onSuccess(response: Array) { // use response } override fun onComplete() { // do whatever, like hiding the loading view. loading_view.visibility = View.GONE } }) 

我真的很喜欢这个设置,因为它允许我将调用Activity的很多逻辑移动到NetworkConsumer ,只是担心处理结果。

但是,使用RxLifeCycle ,您需要使用Observable而不是Single 。 所以我创建了一个NetworkObserver来处理这个变化。

NetworkObserver:

 abstract class NetworkObserver : Observer<NetworkResponse> { override fun onSubscribe(d: Disposable) {} override fun onNext(response: NetworkResponse) {} override fun onError(e: Throwable) {} override fun onComplete() {} // other functions from NetworkConsumer } 

但是,问题在于在处理网络调用时会调用onComplete ,我宁愿处理onComplete任何UI更改。

例如,当网络调用开始时,我正在显示一个加载屏幕,并且在完成时要隐藏该加载屏幕,而不管它是否失败。

我相信我只需要使用一个不同的类,而不是Observer这个,但我不确定哪个类最适合这个。

正确的答案是SingleObserver ,这是完美的网络。

 abstract class NetworkObserver : SingleObserver> { override fun onSubscribe(d: Disposable) { ... } override fun onSuccess(response: NetworkResponse) { ... handle onSuccess } override fun onError(e: Throwable) { ... cancelled or an error } }