2017-01-11 99 views
1

我在Anko doAsync調用中使用Retrofit調用異步調用。問題是我不知道如何捕捉IOException,它正確地拋出​​,基本上執行調用沒有被調用。如果我評論if (resultBody is T)這一行,並將此電話打入trycatch,它就像魅力一樣。有人知道爲什麼在Anko異步調用(Kotlin)中捕獲異常的錯誤

doAsync { 

    val response = call.execute() 

    uiThread { 

     if (response.isSuccessful) { 

      val resultBody = response.body() 

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

回答

0

從doAsync文檔:

  • @param exceptionHandler的可選的異常處理程序。 *如果定義了 ,則[任務]內拋出的任何異常將傳遞給它。如果 不是,則例外將被忽略。

貌似可以傳遞一個exceptionHandler對它們進行管理,否則將處理異常與他們crashLogger

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

//... 

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

您可以檢查Anko doAsync implementation瞭解詳情。