に失敗した私はtimeotがocurringされたときに私の観察可能にretryWhenを実装しようとしていますが、私は奇妙なエラーがここIDEのAndroid Studioで3.0KotlinとRxJava型推論が
を強調していたコードです:
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を推測するのに十分ではない情報を10楽しいフラットマップ ( マッパー:((t:Throwable)→ObservableSource)!) 明示的に指定してください。 'もし' 演算子のための
同じ:制御フロー式の
型推論に失敗しました。オペレータ.justについて明示的
その型を指定してください:
型推論を失敗しました:不足していた情報を 楽しいだけ のパラメータTを推測する( アイテム:!T ) :観察可能! 明示的に指定してください。オペレータ.emptyについては
:
型推論に失敗しました: :観察可能:ちょうど (T ! 項目)
楽しみにパラメータTを推測するのに十分ではない情報を! 明示的に指定してください。
そして.ERROR事業者のための:
型推論に失敗しました: :観察可能:
楽しいエラー (!のThrowable 例外)のパラメータTを推測するのに十分ではない情報を! 明示的に指定してください。
これを修正するにはどうすればよいですか?私が意味する
は、このコードは、Javaでここにもありました: How to add a timeout to detect that an Observable didn't emit for a while
しかし、私はKotlinにsimiliaryそれを変換するとき、それは私にコンパイラがどのようなタイプを把握することはできません
ありがとうございました。しかし、このタイムアウトが発生すると、Observableというホストが破棄されます。これは発生したくありません。多分あなたはそれを防ぐ方法を知っていますか?私はこれを意味します:https://stackoverflow.com/questions/42805481/how-to-add-a-timeout-to-detect-that-an-observable-didnt-emit-for-a-while – Konrad
'retryWhen'はオリジナルのソースは 'timeout'のためにエラーで終了します。私はそれを回避する方法を知らない。 – jbarat