2

我在 Anko doAsync 调用中使用 Retrofit 调用异步调用。问题是我不知道如何捕获execute()正确抛出的 IOException,基本上没有调用执行调用。如果我评论该if (resultBody is T)行,并将调用放在 a 中trycatch,它就像一个魅力。有谁知道为什么?

doAsync {

    val response = call.execute()

    uiThread {

        if (response.isSuccessful) {

            val resultBody = response.body()

            if (resultBody is T)
                callback.onSuccess(resultBody)
        }
    }
}
4

1 回答 1

2

来自 doAsync 文档:

  • @param exceptionHandler 可选的异常处理程序。* 如果已定义,则 [task] 中抛出的任何异常都将传递给它。如果没有,异常将被忽略。

看起来您可以通过 anexceptionHandler来管理它们,或者它将使用它们处理异常crashLogger

private val crashLogger = { throwable : Throwable -> throwable.printStackTrace() }

//...

fun <T> T.doAsync( //...
    exceptionHandler: ((Throwable) -> Unit)? = crashLogger,
    //... )

您可以查看Anko doAsync 实现以了解详细信息。

于 2017-01-11T23:18:01.513 回答