在Anko异步调用(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可选的异常处理程序。 *如果定义,任何抛出[任务]的异常将被传递给它。 否则,异常将被忽略。
看起来你可以通过一个exceptionHandler
来管理它们,或者用crashLogger
来处理异常:
private val crashLogger = { throwable : Throwable -> throwable.printStackTrace() } //... fun <T> T.doAsync( //... exceptionHandler: ((Throwable) -> Unit)? = crashLogger, //... )
你可以查看Anko doAsync的实现细节。