在Anko异步调用中捕获异常时出错(Kotlin)

时间:2017-01-11 19:57:02

标签: android kotlin anko

我在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)
        }
    }
}

1 个答案:

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