Android网络篇(一)—— OkHttp的基本使用

因为这个系列是属于Android的基础系列,所以并不会涉及到很深的内容层次。作为网络这一个模块而言,我们经历了几个阶段。从最初的HttpClicent(已被废弃)到后面的HttpUrlConnection,当然在HttpUrlConnection的基础上出现了很多的网络框架,诸如:Volley,XUtils等等。但是随着OkHttp的推出,原来的这些网络框架都失去了色彩,OkHttp以其独特的魅力迅速获得了广大开发者的喜爱,今天我们就来看看关于OkHttp的那些事。

OkHttp的基本特性

(1)支持HTTP 2.0,允许所有同一个主机地址的请求共享一个socket链接。
(2)连接池复用减少请求延时,同步避免了资源浪费。
(3)透明的GZIP压缩减少响应数据的大小。
(4)自带缓存机制,可以避免一些重复请求。
(5)多IP使用,当服务断开后,自动切换备用IP地址,重新发起连接。

OkHttp的基本使用

添加依赖
// 网络请求框架
// define a BOM and its version
api(platform("com.squareup.okhttp3:okhttp-bom:4.9.1"))

// define any required OkHttp artifacts without version
api("com.squareup.okhttp3:okhttp")
api("com.squareup.okhttp3:logging-interceptor")
异步get请求

主要的步骤为:
(1)创建OkHttp实例。
(2)构建请求参数 默认为get()请求,可以不写。
(3)构建请求。
(4)发送请求并获取回调(enqueue为异步请求,execute为同步请求(由于会阻塞线程,不建议使用))。

/**
 * 普通的Get请求
 */
fun okHttpGet(view: View) {
   
    val url = "http://www.baidu.com"
    // 1.创建OkHttp实例
    val okHttpClient = OkHttpClient()
    // 2.构建请求参数 默认为get()请求,可以不写
    val request = Request.Builder().url(url).get().build()
    // 3.构建请求
    val call = okHttpClient.newCall(request)
    // 4.发送请求并获取回调(enqueue为异步请求,execute为同步请求(由于会阻塞线程,不建议使用))
    call.enqueue(object : Callback {
   
        override fun onFailure(call: Call, e: IOException) {
   
            Log.i("okHttp", "请求失败${
     e.printStackTrace()}")
        }

        override fun onResponse(call: Call, response: Response) {
   
            Log.i(
                "okHttp",
                response.protocol.toString() + " " + response.code + " " + response.message
            )
            val headers = response.headers
            for (i in 0 until headers.size) {
   
                Log.i("okHttp", headers.name(i) + ":" + headers.value(i))
            }
            Log.i("okHttp", "onResponse: " + response.body!!.string())
        }
    })
}
异步post请求

主要的步骤为:
(1)创建OkHttp实例。
(2)构建请求参数 默认为get()请求,可以不写。
(3)构建请求。
(4)发送请求并获取回调(enqueue为异步请求,execute为同步请求(由于会阻塞线程,不建议使用))。

/**
 * Post方式提交String
 */
fun okHttpPost(view: View) {
   
    val url = "http://www.5mins-sun.com:8081/user/direct_login"
    //1.构建OkHttp实例
    val okHttpClient = OkHttpClient()
    //2.构建请求参数
    val mediaType = "application/json; charset=utf-8".toMediaTypeOrNull()
    val map = mutableMapOf<String, Any>()
    map["phone"] = "13701659446"
    val requestBody = Gson().toJson(map)
    val request = Request.Builder().url(url).post(requestBody.toRequestBody(mediaType)).build()
    //3.构建请求
    val
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值