学习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()方法,将服务器返回的数据显示到界面上。