学习Android之OkHttp


使用OkHttp

  有许多出色的网络通信库可以代替原生的HttpURLConnect,OkHttp尤其出色。

添加依赖

  在使用OkHttp之前,需要在项目中添加依赖:

    implementation 'com.squareup.okhttp3:okhttp:4.1.0'

  上述依赖会下载两个库:一个是OkHttp库,一个是Okio库,后者是前者的通信基础。

具体用法

  首先需要创建一个OkHttpClient的实例:

        val client = OkHttpClient()

  接下来如果要发起一条HTTP请求,就要创建一个Request对象:

        val request = Request.Builder()
            .url("https//www.baidu.com")
            .build()

  之后调用OkHttpClient的newCall()方法来创建一个Call对象,并调用它的execute()方法来发送请求并获取服务器返回的数据:

        val response = client.newCall(request).execute()

  Response对象就是服务器返回的数据了,如下写法来得到返回的具体内容:

        val responseData = response.body?.string()

  如果是发送一条POST请求,比GET请求复杂一点。

  需要先构建一个Request Body对象来存放待提交的参数:

        val requestBody = FormBody.Builder()
            .add("username", "admin")
            .add("password", "123456")
            .build()

  然后在Request.Builder中调用post()方法,并将RequsetBody对象传入:

        val request = Request.Builder()
            .url("https//www.baidu.com")
            .post(requestBody)
            .build()

  接下来的操作就和GET请求一样了,调用execute()方法发送请求并获取服务器返回的数据。

  简单应用一下:

    private fun sendRequestWithOkHttp() {
        thread { 
            try {
                val client = OkHttpClient()
                val request = Request.Builder()
                    .url("https//www.baidu.com")
                    .build()
                val response = client.newCall(request).execute()
                val responseData = response.body?.string()
                if(responseData != null) {
                    showResponse(responseData)
                }
            } catch (e: Exception){
                e.printStackTrace()
            }
        }
    }

  先开启子线程,再发出HTTP请求,注意调用showRedponse()方法,将服务器返回的数据显示到界面上。