Android之网络请求通过协程+okhttp的没有做网络异常处理导致程序奔溃问题

Posted chen.yu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android之网络请求通过协程+okhttp的没有做网络异常处理导致程序奔溃问题相关的知识,希望对你有一定的参考价值。

1 问题

app里面的网络请求是通过协程+okhttp来实现的,但是没有做网络异常处理(域名无法解析、502错误等等一系列),导致程序奔溃
 

 

 

 

 

 

 

 

 

 

 

2 尝试

因为app基本上做好了,外面有大几十个地方调用,然后又有不同的作用域,调用的地方太多了,一开始修改在最外出的网络请求地方直接加上try catch,发现捕获不到异常

 

 

 

 

 

 

 

 

 

 

3 最终解决办法

写一个扩展函数,文件如下

const val TAG = "net error"

suspend fun <T>call(job: suspend () -> T): ApiResponse<T> {
    return try {
        ApiResponse(job())
    } catch (e: java.lang.Exception) {
        ApiResponse(e)
    }
}

suspend fun <T> Call<T>.subscribe(
        scope: CoroutineScope,
        customErrorHandle: (code: Int, e: String?) -> Unit = defaultError
): T? {
    return try {
        withContext( Dispatchers.IO) {
            val result = exec

以上是关于Android之网络请求通过协程+okhttp的没有做网络异常处理导致程序奔溃问题的主要内容,如果未能解决你的问题,请参考以下文章

Android网络请求框架之Okhttp3.0 详细使用

Android网络请求框架之Okhttp3.0 详细使用

Android网络请求框架之Okhttp3.0 详细使用

Android实际开发之网络请求组件的封装(OkHttp为核心)

Android探索之基于okHttp打造自己的网络请求

android网络框架OkHttp之get请求(源码初识)