【问题标题】:Error catching exception in Anko async call (Kotlin)在 Anko 异步调用 (Kotlin) 中捕获异常时出错
【发布时间】:2017-01-11 19:57:01
【问题描述】:

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

【问题讨论】:

    标签: android kotlin anko


    【解决方案1】:

    来自 doAsync 文档:

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

    看起来您可以传递exceptionHandler 来管理它们,否则它将使用它们的crashLogger 处理异常:

    private val crashLogger = { throwable : Throwable -> throwable.printStackTrace() }
    
    //...
    
    fun <T> T.doAsync( //...
        exceptionHandler: ((Throwable) -> Unit)? = crashLogger,
        //... )
    

    详情可查看Anko doAsync implementation

    【讨论】:

      猜你喜欢
      • 2012-02-03
      • 2016-09-30
      • 2015-04-26
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 2011-08-12
      相关资源
      最近更新 更多