3-2 OkHttp的基本封装

本文介绍了如何进行OkHttp的基础封装,包括使用步骤、优化点以及具体的封装步骤。从构建到配置参数,再到执行GET和POST请求,详细阐述了OkHttp的使用。同时讨论了如何通过抽象接口、网络日志工具和重试机制来优化请求管理,并提到如何在UI中处理回调和启动线程的问题。
摘要由CSDN通过智能技术生成

OkHttp的基本封装

一、使用步骤

  1. 构建client

  2. 配置参数

  3. 构建request

  4. 执行请求call.execute/enquene

    • GET请求

    • POST请求

//client
val okClient = OkHttpClient.Builder()
        .callTimeout(10, TimeUnit.SECONDS)//完整请求超时时长,从发起到接收返回数据,默认值0,不限
        .connectTimeout(10, TimeUnit.SECONDS)//与服务器建立连接的时长,默认10s
        .readTimeout(10, TimeUnit.SECONDS)//读取服务器返回数据的时长
        .writeTimeout(10, TimeUnit.SECONDS)//向服务器写入数据的时长,默认10s
        .cache(Cache(mCacheFile, 1024))//http 的缓存大小,位置
        .cookieJar(CookieJar.NO_COOKIES)//不使用cookie,若用,自定义cookieJar实现
        .build()

二、优化点

  1. 抽象接口封装

  2. 配置CookieJar,网络日志工具,重试机制

  3. 管理请求cancel/cancelAll

    1. 发送三个请求,有一个请求想要取消,request添加tag标记

三、okhttp封装步骤

1 添加库

implementation("com.squareup.okhttp3:okhttp:4.8.0")
implementation("com.squareup.okhttp3:logging-interceptor:4.8.0")
​
implementation("com.google.code.gson:gson:2.8.6")
​
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
​
implementation 'com.blankj:utilcodex:1.29.0'

2

 * 网络请求的接口回调
 */
interface IHttpCallback {
​
    /**
     * 网络请求成功的回调
     * [data] 返回回调的数据结果
     * @param data 返回回调的数据结果
     */
    fun onSuccess(data: Any?)
​
​
    /**
     * 接口回调失败
     * [error] 错误信息的数据类
     */
    fun onFailed(error: Any?)
​
}

3

interface HttpApi {
​
    /**
     * 抽象的http的get请求封装,异步
     */
    fun get(params: Map<String, Any>, urlStr: String, callback: IHttpCallback)
​
    /**
     * 抽象的http同步的 get请求
     */
    fun getSync(params: Map<String, Any>, urlStr: String): Any? {
        return Any()
    }
​
    /**
     * 抽象的http的post的请求 异步
     */
    fun post(body: Any, urlStr: String, callback: IHttpCallback)
​
    /**
     * 抽象的Http的post 同步请求
     */
    fun postSync(body: Any, urlStr: String): Any? = Any() 这种方式也可以
​
​
    fun cancelRequest(tag: Any)
​
    fun cancelAllRequest()
}

4

class OkHttpApi private constructor() : HttpApi {
​
    var maxRetry = 0//最大重试 次数
​
    //存储请求,用于取消
    private val callMap = SimpleArrayMap<Any, Call>()
​
    //okHttpClient
    private val defaultClient = OkHttpClient.Builder()
        .callTimeout(10, TimeUnit.SECONDS)//完整请求超时时长,从发起到接收返回数据,默认值0,不限定,
        .connectTimeout(10, TimeUnit.SECONDS)//与服务器建立连接的时长,默认10s
        .readTimeout(10, TimeUnit.SECONDS)//读取服务器返回数据的时长
        .writeTimeout(10, TimeUnit.SECONDS)//向服务器写入数据的时长,默认10s
        .retryOnConnectionFailure(true)//重连
        .followRedirects(false)//重定向
        .cache(Cache(File("sdcard/cache", "okhttp"), 1024))//缓存数据
//        .cookieJar(CookieJar.NO_COOKIES) 登录状态通过cookie实现的
        .cookieJar(LocalCookieJar())//自定义CookieJar实现
        .addNetworkInterceptor(CniaoInterceptor())//公共header的拦截器
        .addNetworkInterceptor(KtHttpLogInterceptor {
            logLevel(KtHttpLogInterceptor.LogLevel.BODY)
        })//添加网络拦截器,可以对okHttp的网络请求做拦截处理,不同于应用拦截器,这里能感知所有网络状态,比如重定向。
        .addNetworkInterceptor(RetryInterceptor(maxRetry))
//        .hostnameVerifier(HostnameVerifier { p0, p1 -> true })
//        .sslSocketFactory(sslSocketFactory = null,trustManager = null)
        .buil
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值