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

时间:2014-08-29 20:31:19

标签: android retrofit rx-java

我正在使用Retrofit在Android中编写API客户端,这种代​​码会重复出现:

myObservableFromRetrofit
  .subscribeOn(Schedulers.io())
  .observeOn(AndroidSchedulers.mainThread())
  .doOnError(... print stack trace ...)

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

我通过以下方式调用改造功能:

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

但是这会失去通用类型信息。

2 个答案:

答案 0 :(得分:4)

您应该使用this blog post中详述的compose()运算符,而不是包装Observable。所以你有:

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

你这样称呼:

myObservableFromRetrofit
    .compose(applySchedulers())

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

myObservableFromRetrofit
    .compose(this.<YourType>applySchedulers())

答案 1 :(得分:3)

?替换为T并添加缺少的<T>。这将允许Type Inference正确完成。

public <T> Observable<T> commonObservable(Observable<T> observable) {
  return observable
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .doOnError(... print stack trace ...)
}

这是通配符捕获的问题。

  

在大多数情况下,您不必担心通配符捕获,除非您看到包含短语“capture of”的错误消息。

我假设你正在参考。 Here有关它的更多信息