I am trying to implement retryWhen on my Observable when there is ocurring a timeot, but i have strange errors underlined in IDE Android Studio 3.0
Here is the code:
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()
The IDE underlines on red the .flatMap operator and says:
Type inference failed: Not enough information to infer parameter R in
fun flatMap ( mapper: ((t: Throwable) → ObservableSource)! ) : Observable! Please specify it explicitly.
Same for the 'if' operator:
Type inference for control flow expression failed. Please specify its type explicitly
For operator .just:
Type inference failed: Not enough information to infer parameter T in fun just ( item: T! ) : Observable! Please specify it explicitly.
For operator .empty:
Type inference failed: Not enough information to infer parameter T in
fun just ( item: T! ) : Observable! Please specify it explicitly.
And for the .error operator:
Type inference failed: Not enough information to infer parameter T in
fun error ( exception: Throwable! ) : Observable! Please specify it explicitly.
How to fix this?
I mean, this code was also here in Java: How to add a timeout to detect that an Observable didn't emit for a while
But when i convert it similiary to Kotlin, it gives me the described situation issue