如何避免重复常见的可观察配置?

ktu*_*nio 3 android rx-java retrofit

我正在使用 Retrofit 在 Android 中编写一个 API 客户端,这种代​​码被重复了很多次:

myObservableFromRetrofit
  .subscribeOn(Schedulers.io())
  .observeOn(AndroidSchedulers.mainThread())
  .doOnError(... print stack trace ...)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种技术可以避免重复这些东西。

我围绕对改造功能的调用:

public Observable<?> commonObservable(Observable<?> observable) {
  return observable
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .doOnError(... print stack trace ...)
}
Run Code Online (Sandbox Code Playgroud)

但这会丢失泛型类型信息。

ste*_*oid 5

您应该使用 compose() 运算符,而不是包装您的 Observables,如本博文中所述。所以你会有:

<T> Transformer<T, T> applySchedulers() {  
    return observable -> observable.subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .doOnError(... print stack trace ...)
}
Run Code Online (Sandbox Code Playgroud)

你会这样称呼它:

myObservableFromRetrofit
    .compose(applySchedulers())
Run Code Online (Sandbox Code Playgroud)

或者这个,如果你在 JDK 8 下编译:

myObservableFromRetrofit
    .compose(this.<YourType>applySchedulers())
Run Code Online (Sandbox Code Playgroud)