【发布时间】:2016-12-19 13:17:20
【问题描述】:
RuntimeExceptions 应该表示编程错误,我希望我的应用程序在我的 observables 中的某些东西抛出 RuntimeException 时崩溃。
最好的方法是什么?现在我正在考虑这个解决方案(它是 Kotlin,但我希望它可以理解)
fun <T> Observable<T>.subscribeCrashOnRuntimeException(onNext: (T) -> Unit, onError: (Throwable) -> Unit) {
this.subscribe({
onNext(it)
}, { e ->
if (e is RuntimeException) {
throw e
} else {
onError(e)
}
})
}
fun usageExample() {
val observable = Observable.just(1)
observable.subscribeCrashOnRuntimeExceptions(
{ next -> Log.d("TAG", "next: $next") },
{ e -> Log.d("TAG", "error: $e") }
)
}
但我对此表示怀疑。例如,使用此解决方案很难偶尔“捕获”特定的 RuntimeExceptions。也许有一种众所周知的方法来处理我只是不知道如何 google 的情况?
【问题讨论】:
-
阅读
onErrorResumeNext,您可以在其中决定如何处理错误。 -
RuntimeExceptions are supposed to indicate programming error- 不一定。丢失的文件是编程错误吗?是网络连接断开了吗?大多数时候,您明确不想崩溃,而是减轻或重试。 -
@TassosBassoukos 丢失的文件不是 RuntimeExceptions 对于断开的网络连接也是如此。好像你不明白什么是 RuntimeExceptions。您似乎认为它只是 Exception 的同义词。