2017-01-11 8 views
1

J'appelle un appel asynchrone en utilisant Retrofit dans un appel Anko doAsync. Le problème est que je ne sais pas comment attraper le IOException qui lance le execute() correctement, fondamentalement l'appel d'exécution n'est pas appelé. Si je commente la ligne if (resultBody is T), et mettre l'appel à l'intérieur d'un trycatch cela fonctionne comme un charme. Quelqu'un sait pourquoi?Erreur lors de la détection d'une exception dans l'appel asynchrone Anko (Kotlin)

doAsync { 

    val response = call.execute() 

    uiThread { 

     if (response.isSuccessful) { 

      val resultBody = response.body() 

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

Répondre

0

De doAsync docs:

  • @param ExceptionHandler option gestionnaire d'exceptions. * Si est défini, toutes les exceptions lancées dans [tâche] lui seront transmises. Si pas, les exceptions seront ignorées.

On dirait que vous pouvez passer un exceptionHandler pour les gérer ou il gérer les exceptions avec leur crashLogger:

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

//... 

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

Vous pouvez vérifier Anko doAsync implementation pour plus de détails.