Android中OkHttp3的使用

概述

是目前Android使用最广泛的网络框架。
在这里插入图片描述
上图很清晰了,这里只做一个简单的介绍。
1.创建一个OkHttpClient对象,
2.创建request和requestBody(如果有)
3.利用request对象创建call对象。选择是同步还是异步请求。
4.代码上在上一步就可以得到响应结果,工作流程是进入分发器完成任务的调配,分发器维护请求队列和线程池。
5.进入拦截器
6.服务端返回响应结果

使用

引入依赖

 implementation 'com.squareup.okhttp3:okhttp:4.9.0'

加网络权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

请求方式都是类似的,特殊一点的是post请求上传的参数可能有多种形式,如表单、json、文件等。我们以异步get请求为代码示例:

fun getAsync(urlStr: String) {
	try{
       Thread{
       		val client = OkHttpClient()
            val request = okhttp3.Request.Builder().get().url(urlStr).build()
            client.newCall(request).enqueue(object: okhttp3.Callback {
            		override fun onFailure(call: okhttp3.Call, e: IOException) {
        
                    }
                    override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) {
                        val result = response.body?.string()
                        Log.d("t","url = $urlStr")
                        Log.d("t", "result = $result")
                        }
                    })
            }
            }catch (e: Exception){ }

        }

配置

自定义拦截器,有网络拦截器addInterceptor和应用拦截器addNetworkInterceptor,addInterceptor优先级更高。

val client = OkHttpClient()
	.newBuilder()
	.addInterceptor(object : Interceptor {
 override fun intercept(chain: Interceptor.Chain): Response {
	val request = chain.request()
	val t1 = System.currentTimeMillis()
	val response = chain.proceed(request)
 	val t2 = System.currentTimeMillis()
 	Log.d("tian","Processing time = ${t2 - t1}")
return response
	}
 })
	.build()

参考

https://blog.csdn.net/weixin_63357306/article/details/128918616

相关推荐

  1. 认识并使用OkHttp3

    2024-07-15 06:36:02       54 阅读
  2. Android OkHttp

    2024-07-15 06:36:02       30 阅读
  3. OkHttp理解和使用

    2024-07-15 06:36:02       50 阅读
  4. OkHttp理解和使用

    2024-07-15 06:36:02       53 阅读
  5. OkHttp理解和使用

    2024-07-15 06:36:02       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 06:36:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 06:36:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 06:36:02       58 阅读
  4. Python语言-面向对象

    2024-07-15 06:36:02       69 阅读

热门阅读

  1. 速盾:cdn技术是什么意思?

    2024-07-15 06:36:02       23 阅读
  2. 使用adb连接安卓手机

    2024-07-15 06:36:02       23 阅读
  3. Android人脸解锁源码解析

    2024-07-15 06:36:02       17 阅读
  4. 速盾:高防cdn和普通cdn的区别?

    2024-07-15 06:36:02       29 阅读
  5. Tick数据的清洗和1分钟K线合成

    2024-07-15 06:36:02       18 阅读
  6. App测试自动化工具UIAutomator2的使用

    2024-07-15 06:36:02       23 阅读
  7. React@16.x(57)Redux@4.x(6)- 实现 bindActionCreators

    2024-07-15 06:36:02       28 阅读
  8. PyTorch构建一个肺部CT图像分类模型来分辨肺癌

    2024-07-15 06:36:02       19 阅读
  9. Python学生信息管理系统的设计与实现

    2024-07-15 06:36:02       28 阅读
  10. SQL优化

    SQL优化

    2024-07-15 06:36:02      30 阅读
  11. RocketMQ

    RocketMQ

    2024-07-15 06:36:02      24 阅读
  12. SpringBoot实战:定时任务

    2024-07-15 06:36:02       20 阅读