Android okhttp网络请求封装Kotlin版(1)

okhttp一直作为Android核心的网络请求框架 这里做简单的一些封装 这里使用语言kotlin (目前作为Google官方Android开发第一语言) 直接上代码:
封装类
OkhttpUtils类:
class OkhttpUtils {

companion object{
    private var instance:OkhttpUtils? = null
    private var okhttp:OkHttpClient? = null

    @Synchronized
    fun getInstance():OkhttpUtils{
        if (instance == null) instance = OkhttpUtils()
        okhttp = OkHttpClient().newBuilder()
            .retryOnConnectionFailure(true)
            .connectTimeout(10000, TimeUnit.SECONDS) //连接超时
            .readTimeout(10000, TimeUnit.SECONDS) //读取超时
            .writeTimeout(10000, TimeUnit.SECONDS) //写超时
            .build()
        return instance!!
    }

}

/**
 * Get请求
 * @map 请求参数 map的key必须不同
 * @url 请求地址
 * @httpCallBack 回调
 */
fun getRequest(map:HashMap<String,String>,url:String,httpCallBak:HttpCallBack){
    var urlRequest:String = ""
    var urlL:String = ""
    if (map.size > 0){
        val list = ArrayList(map.keys)
        urlL = "$url?"
        for (key in map.keys){
            urlRequest += if (list[map.size - 1].equals(key)){
                key + "=" + map[key]
            }else{
                key + "=" + map[key] + "&"
            }
        }
        urlL += urlRequest
    }


    val request: Request = Request.Builder().url(urlL).build()
    val call: Call? = okhttp?.newCall(request)
    call?.enqueue(object : Callback {
        override fun onFailure(call: Call, e: IOException) {
            httpCallBak.onError(e.printStackTrace().toString())
        }

        override fun onResponse(call: Call, response: Response) {
            response.body?.let { httpCallBak.onSuccess(it.string()) }
        }

    })

}

/**
 * Post请求
 * @map 请求参数
 * @url 请求地址
 * @httpCallBack 回调
 */
fun postRequest(map:HashMap<String,String>,url:String,httpCallBak:HttpCallBack){
    var builder: FormBody.Builder = FormBody.Builder();
    if (map.size > 0){
        for (key in map.keys){
            key.let {
                builder.add(it, map[it].toString())
            }
        }
    }

    val formBody:FormBody = builder.build()

    val request: Request = Request.Builder().url(url)
        .post(formBody)
        .build()
    val call: Call? = okhttp?.newCall(request)
    call?.enqueue(object : Callback {
        override fun onFailure(call: Call, e: IOException) {
            httpCallBak.onError(e.printStackTrace().toString())
        }

        override fun onResponse(call: Call, response: Response) {
            response.body?.let {
                httpCallBak.onSuccess(it.string())
            }
        }

    })
}

}
接口:HttpCallBack:
interface HttpCallBack {
fun onError(errorLog:String)
fun onSuccess(message:String)
}
调用方法(这里只放post请求,get请求同理):
//请求参数
var map = HashMap<String, String>();
map[“map”] = “123456”;
map[“map1”] = “123456”;
//具体请求方法
with(OkhttpUtils) {
getInstance().postRequest(map, “https://www.baidu.com/”, object : HttpCallBack {
override fun onError(errorLog: String) {

            }

            override fun onSuccess(message: String) {

            }

        })


    }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值