我在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)
}
}
}
答案 0 :(得分:2)
来自doAsync docs:
- @param exceptionHandler可选的异常处理程序。 *如果 已定义,[task]中抛出的任何异常都将传递给它。如果 不,例外将被忽略。
您似乎可以通过exceptionHandler
来管理它们,或者它会处理crashLogger
的例外情况:
private val crashLogger = { throwable : Throwable -> throwable.printStackTrace() }
//...
fun <T> T.doAsync( //...
exceptionHandler: ((Throwable) -> Unit)? = crashLogger,
//... )
您可以查看Anko doAsync implementation了解详情。