2017-01-11 7 views
1

Ich rufe einen Async-Aufruf mit Retrofit in einem Anko DoAsync-Aufruf. Das Problem ist, dass ich nicht weiß, wie die IOException zu fangen, die die execute() richtig löst, im Grunde wird der Aufruf ausführen nicht aufgerufen. Wenn ich die if (resultBody is T) Linie kommentiere und den Anruf innerhalb einer trycatch stelle, funktioniert es wie ein Charme. Wer weiß warum?Fehler beim Einfangen der Ausnahme in Anko Async-Anruf (Kotlin)

doAsync { 

    val response = call.execute() 

    uiThread { 

     if (response.isSuccessful) { 

      val resultBody = response.body() 

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

Antwort

0

Von doAsync docs:

  • @param Exception optional Handler Ausnahme. * Wenn definiert ist, werden alle in [task] geworfenen Ausnahmen an sie übergeben. Wenn nicht, werden Ausnahmen ignoriert.

Sieht aus wie Sie eine exceptionHandler sie verwalten passieren können, oder es wird Ausnahmen behandeln mit ihren crashLogger:

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

//... 

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

Sie können Anko doAsync implementation für Details überprüfen.

Verwandte Themen