我使用retrofit2和kotlin协程调用API,但是API返回的状态码有200、400和700。
当请求API并且响应状态码为400或者700时,"withTimeout"协程会抛出异常崩溃。
我希望能够使用"withTimeout"协程处理状态码为400和700的响应消息,或者如何自定义"CoroutineScope"。谢谢。
这是我的代码:
这是我的代码:
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)