目录
概述
是目前Android使用最广泛的网络框架。
上图很清晰了,这里只做一个简单的介绍。
1.创建一个OkHttpClient对象,
2.创建request和requestBody(如果有)
3.利用request对象创建call对象。选择是同步还是异步请求。
4.代码上在上一步就可以得到响应结果,工作流程是进入分发器完成任务的调配,分发器维护请求队列和线程池。
5.进入拦截器
6.服务端返回响应结果
使用
引入依赖
groovy
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
加网络权限
xml
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
请求方式都是类似的,特殊一点的是post请求上传的参数可能有多种形式,如表单、json、文件等。我们以异步get请求为代码示例:
kotlin
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优先级更高。
kotlin
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