在 Anko 异步调用中捕获异常时出错(Kotlin)
Error catching exception in Anko async call (Kotlin)
我在 Anko doAsync 调用中使用 Retrofit 调用异步调用。问题是我不知道如何正确捕获抛出 execute()
的 IOException,基本上不会调用执行调用。如果我评论 if (resultBody is T)
行,并将调用放在 trycatch
中,它就像一个魅力。有人知道为什么吗?
doAsync {
val response = call.execute()
uiThread {
if (response.isSuccessful) {
val resultBody = response.body()
if (resultBody is T)
callback.onSuccess(resultBody)
}
}
}
来自 doAsync 文档:
- @param exceptionHandler optional exception handler. * If
defined, any exceptions thrown inside [task] will be passed to it. If
not, exceptions will be ignored.
看起来你可以通过一个 exceptionHandler
来管理它们,或者它会处理它们的异常 crashLogger
:
private val crashLogger = { throwable : Throwable -> throwable.printStackTrace() }
//...
fun <T> T.doAsync( //...
exceptionHandler: ((Throwable) -> Unit)? = crashLogger,
//... )
您可以查看Anko doAsync implementation了解详情。
我在 Anko doAsync 调用中使用 Retrofit 调用异步调用。问题是我不知道如何正确捕获抛出 execute()
的 IOException,基本上不会调用执行调用。如果我评论 if (resultBody is T)
行,并将调用放在 trycatch
中,它就像一个魅力。有人知道为什么吗?
doAsync {
val response = call.execute()
uiThread {
if (response.isSuccessful) {
val resultBody = response.body()
if (resultBody is T)
callback.onSuccess(resultBody)
}
}
}
来自 doAsync 文档:
- @param exceptionHandler optional exception handler. * If defined, any exceptions thrown inside [task] will be passed to it. If not, exceptions will be ignored.
看起来你可以通过一个 exceptionHandler
来管理它们,或者它会处理它们的异常 crashLogger
:
private val crashLogger = { throwable : Throwable -> throwable.printStackTrace() }
//...
fun <T> T.doAsync( //...
exceptionHandler: ((Throwable) -> Unit)? = crashLogger,
//... )
您可以查看Anko doAsync implementation了解详情。