我正在尝试在Observable上实现retryWhen,当出现超时时使用该方法,但是在IDE Android Studio 3.0中出现了奇怪的错误。
以下是代码:
rxRssiRepository.onRssiUpdate() //returns Observable<RssiEvent>
.timeout(10, TimeUnit.MILLISECONDS)
.retryWhen { t: Observable<Throwable> ->
t.flatMap { error: Throwable ->
if (error is TimeoutException) {
stopLocationUpdates()
Log.v("TIMEOUT", "TIMEOUT RSSI EVENTS")
Observable.just(Observable.empty())
} else {
Observable.error(error)
}
}
}
.concatMap { t: RssiEvent ->
appendRssiEvent(t)
}
.publish()
IDE在.flatMap操作符下面用红色下划线标出,提示如下:
'if'操作符同样如此:类型推断失败:无法推断fun flatMap(mapper: ((t: Throwable) → ObservableSource)!): Observable!中参数R的信息。请显式指定。
.just操作符也是一样的情况:控制流表达式的类型推断失败。请显式指定其类型。
.empty操作符也是这样的情况:类型推断失败:无法推断fun just(item: T!): Observable!中参数T的信息。请显式指定。
.error操作符同样如此:类型推断失败:无法推断fun empty(): Observable!中参数T的信息。请显式指定。
如何解决这个问题呢?类型推断失败:无法推断fun error(exception: Throwable!): Observable!中参数T的信息。请显式指定。
我的意思是,这段代码在Java中也存在:如何添加超时以检测Observable是否长时间未发出。
但是当我将其转换为Kotlin时,就会出现上述情况。
retryWhen
应该重新订阅源可观测对象,即使由于timeout
原因而导致原始源出错。我不知道该如何解决这个问题。 - jbarat