繁体   English   中英

Android Kotlin“withTimeout”协程如何处理异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM