0
点赞
收藏
分享

微信扫一扫

Android 用80行代码 封装最简单网络请求 HttpUtils


封装目的:

  •         在小型项目中,实现最简单最高效的网络请求封装
  •         轻量化,不借助除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,核心内容包含以下四点
  1. 静态伴生类实现 (直接用类名调用)
  2. 接口地址罗列 URL_Login (纯静态属性)
  3. 请求方法 get()(伪静态方法)
  4. 请求方法 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.思想建议:

Android 用80行代码 封装最简单网络请求 HttpUtils_okhttp

_______________________________________________________________________


如果您感觉文章有用的话,麻烦点个赞吧! 如果您发现文章有任何错误或建议,请评论区留言或者私信! 深海谢过各位的支持,一起加油!

举报

相关推荐

0 条评论