- 连接池减少了请求延迟(如果 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保持一致即可
最后
针对于上面的问题,我总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
,以及系统的进阶学习视频资料。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
[外链图片转存中…(img-H5DKceKQ-1715795294568)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!