- 连接池减少了请求延迟(如果 HTTP/2 不可用)。
- 透明 GZIP 缩小下载大小。
- 响应缓存完全避免网络重复请求。
本博客引用的okhttp版本:com.squareup.okhttp3:okhttp:4.9.0
GET请求
下面代码将请求博主GitHub账户公开信息,并且打印。🙆♀️
simpleGetUse(“https://api.github.com/users/zhangnangua”)
fun simpleGetUse(url: String) {
//创建OkHttpClient
val okHttpClient = OkHttpClient()
//构建request
val requestBuilder = Request.Builder().url(url)
//调用newCall 返回call对象,此后调用enqueue进行异步请求
okHttpClient.newCall(requestBuilder.build()).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
log(“go failure ${e.message}”)
}
override fun onResponse(call: Call, response: Response) {
val msg = if (response.isSuccessful) {
simpleDealData(response)
} else {
“failure ${response.message}”
}
log(msg)
}
})
}
//该函数用于简单处理返回的信息,这里放一次,下面就不放了。
private fun simpleDealData(response: Response): String = StringBuilder().apply {
append(“\n\t”)
append(“header”)
append(“\n\t”)
append(response.headers.joinToString(“\n\t”))
append(“\n\t”)
append(“body”)
append(“\n\t”)
append(“responseCode: ${response.code}”)
append(“\n\t”)
append(
"content: ${
(response.body?.string() ?: “”).let { s: String ->
//对获取到的数据 简单做一下格式化
s.split(“,”).joinToString(“\n\t”)
}
}"
)
}.toString()
结果。😎
…
(X-RateLimit-Resource, core)
(X-RateLimit-Used, 1)
(Accept-Ranges, bytes)
(X-GitHub-Request-Id, 3781:8EFC:1754277:1870E61:61C85330)
body
responseCode: 200
content: {“login”:“zhangnangua”
“name”:“pumpkin”
“bio”:“pumpkin偶尔相信玄学🎈🎈🎈”
…
如果要进行get请求,只需要三步。👀
-
创建OkHttpClient
-
创建request 传入url
-
调用OkHttpClient 的newCall()返回call对象,此后调用enqueue进行异步请求,当然也可以使用execute进行同步请求,博主这里就不进行测试了。
POST请求
post传递会存在两种格式,表格和JSON形式,代码在下面放出来。
另:博主没有搭建接口,就不放测试结果了,大家可以自行复制代码测试。🤦♀️
post 表格格式
fun simplePostUseFrom(url: String, params: Map<String, String>? = null) {
//创建 formBody
val formBody = FormBody.Builder()
.also { builder ->
params?.forEach { (name, value) ->
//参数需要 add 进入FormBody.Builder
builder.add(name, value)
}
}.build()
val okHttpClient = OkHttpClient()
val request = Request.Builder()
.url(url)
.post(formBody) //注意:此时formBody以post的形式传入
.build()
okHttpClient.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
log(“go failure ${e.message}”)
}
override fun onResponse(call: Call, response: Response) {
val msg = if (response.isSuccessful) {
simpleDealData(response)
} else {
“failure code: r e s p o n s e . c o d e m e s s a g e : {response.code} message: response.codemessage:{response.message}”
}
log(msg)
}
})
}
注意:👀
-
需要新增一个FromBody对象,参数保存在FromBody中
-
将FromBody以post的形式传递到Request中
-
其他的和get保持一致即可
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
5177)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!