我正在尝试在我的Observable上实现重试时有一个时间点,但我在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运算符的红色表示:
类型推断失败:没有足够的信息来推断
中的参数R.有趣的flatMap ( mapper :((t:Throwable)→ObservableSource)! ) :可观察! 请明确说明。
'if'运算符相同:
控制流表达式的类型推断失败。请明确指定其类型
对于运营商.just:
类型推断失败:没有足够的信息来推断参数T in 好玩的 ( item:T! ) :可观察! 请明确说明。
对于运营商.empty:
类型推断失败:没有足够的信息来推断
中的参数T. 只是好玩 ( item:T! ) :可观察! 请明确说明。
对于.error运算符:
类型推断失败:没有足够的信息来推断
中的参数T.有趣的错误 ( 例外:可以扔掉! ) :可观察! 请明确说明。
如何解决这个问题?
我的意思是,这段代码也在Java中: How to add a timeout to detect that an Observable didn't emit for a while
但是当我把它转换成Kotlin时,它给了我描述的情况问题
答案 0 :(得分:5)
编译器无法确定您想要返回的类型。
您的案例中最简单的修复方法是添加返回类型的类型。这样的事情Observable.just(Observable.empty<Any>())
。现在编译器将能够确定要返回的类型。