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. I want to handle status code 400 and 700 response message with "withTimeout" coroutine or how to customize "CoroutineScope" thanks.
This is my code
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)
}
}
Error message
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)