封装目的:
- 在小型项目中,实现最简单最高效的网络请求封装
- 轻量化,不借助除okhttp以外的三方框架
- 单个类实现,且可读性高,扩展性高
- 最少的代码行数,最简单的调用方式
调用举例:
1、get请求:
HttpUtils.get(activity, HttpUtils.URL_Login,
onResponse = {
//todo 请求成功后 json解析
}, onFailure = {
//todo 请求失败后处理
})
2、post请求:
val date = hashMapOf<String,String>() //参数集
date["id"] = id //等同于date.put()
HttpUtils.post(activity, HttpUtils.URL_Login, date,
onResponse = {
//todo 请求成功后 json解析
}, onFailure = {
//todo 请求失败后处理
})
具体实现:
1.在AndroidManifest.xml中添加权限
<uses-permission android:name="android.permission.INTERNET" />
2.在APP下的build.gradle中加入okhttp的依赖
dependencies {
...
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
}
3.创建类HttpUtils,核心内容包含以下四点
- 静态伴生类实现 (直接用类名调用)
- 接口地址罗列 URL_Login (纯静态属性)
- 请求方法 get()(伪静态方法)
- 请求方法 post()(伪静态方法)
/**
* @Date: 2024/11/8
* @Author: xinghai.zhao
* @role:网络请求工具类
*/
class HttpUtils {
companion object {
@JvmStatic // id: String?, email: String? <-模拟参数
var URL_Login: String = "" // <-模拟接口地址
fun get(
context: Activity,
url: String,
onResponse: (data: String) -> Unit, //成功回调
onFailure: () -> Unit //失败回调
) {
OkHttpClient().newCall(Request.Builder().url(url).get().addHeader("", "").build())
.enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
context.runOnUiThread {
onResponse(response.body().toString())
}
}
override fun onFailure(call: Call, e: IOException) {
context.runOnUiThread {
onFailure()
}
}
})
}
fun post(
context: Activity,
url: String,
parameters: HashMap<String, String>?,//参数
onResponse: (data: String) -> Unit, //成功回调
onFailure: () -> Unit //失败回调
) {
val build = FormBody.Builder()
//如有参数,装填参数
if (parameters != null && parameters.size > 0) {
val iterator = parameters.iterator()
while (iterator.hasNext()) {
val entry = iterator.next()
build.add(entry.key, entry.value)
}
}
//发起请求
OkHttpClient().newCall(
Request.Builder().url(url).post(build.build())
.addHeader("", "").build()
).enqueue(object : Callback {
//成功
override fun onResponse(call: Call, response: Response) {
context.runOnUiThread {
// todo 增加规则等
onResponse(response.body().toString())
}
}
//失败
override fun onFailure(call: Call, e: IOException) {
context.runOnUiThread {
onFailure()
}
}
})
}
}
}
扩展方向:
1.具体内容:
1、加入泛型,在请求方法内,直接进行上层json解析,然后直接返回结果对象
2、更多接口地址与“URL_Login”并列书写,或者新建一个地址列表类
3、更多的请求方法,如json,文件上传等
4、更多参数,如请求头addHeader()
5、增加拦截器(公共拦截器、方法内拦截器)
2.思想建议:
_______________________________________________________________________
如果您感觉文章有用的话,麻烦点个赞吧! 如果您发现文章有任何错误或建议,请评论区留言或者私信! 深海谢过各位的支持,一起加油!