[英]Android Kotlin "withTimeout" coroutine how to handle exception
I'm using retrofit2 to call API with kotlin coroutines but the API has status code 200, 400 and 700. When request the API and response status code was 400 or 700, which the "withTimeout" coroutine can be exception crash. 我想用“withTimeout”协程或如何自定义“CoroutineScope”来处理状态码 400 和 700 响应消息,谢谢。
这是我的代码
suspend fun getLogin() {
try {
var result = withTimeout(5_000) { // <----this line can be crashed with http code 700
accountService.getLogin(
LoginRequest() // request data
) // retrofit
}
when (result.state_code) { // api response state code
200 -> {
Timber.i("Create account got data: ${result.source}")
}
400 -> {
//....... handle this status code error
}
700 -> {
//....... handle this status code error
}
}
} catch (e: ApiError) {
throw ApiError("Unable to login", e)
}
}
错误信息
2020-04-26 22:55:10.384 28895-28895/com.mgear.mednetapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mgear.mednetapp, PID: 28895
retrofit2.HttpException: HTTP 700
at retrofit2.KotlinExtensions$await$2$2.onResponse(KotlinExtensions.kt:53)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:150)
at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:504)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
实际上应该处理SocketTimeoutException ,但是在这里你可以在这里处理泛型Exception ,稍后检查你的异常是SocketTimeoutException、JsonSyntaxException、UnknownHostException、ConnectException 还是其他。
所以,你可以试试这个。
suspend fun getLogin() {
try {
//Your api call code here.
}catch (e: Exception) {
e.printStacktrace();
//throw ApiError("Unable to login", e)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.