在 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了解详情。