OkHttp的Github地址:https://github.com/square/okhttp
OkHttp非常高效,支持SPDY、连接池、GZIP和HTTP缓存。
在Android Studio中使用不需要下载jar包,直接添加依赖即可:
compile 'com.squareup.okhttp3:okhttp:3.13.1'
添加上述依赖会自动下载两个库,一个是OkHttp库,一个是Okio库,后者是前者的通讯基础。
添加权限
<uses-permission android:name="android.permission.INTERNET"/>
同步请求:执行请求的操作是阻塞式,直到HTTP响应返回。
(OKHttp的execute方法是同步方法)
异步请求:类似于非阻塞式请求,它的执行结果一般都是通过接口回调的方式告知调用者。
(OkHttp的enqueue方法是异步方法)
常用的方法主要有两个:GET和POST。GET表示希望从服务器那里获取数据,而POST则表示希望提交数据给服务器。
注:Android4.4之后的HttpUrlConnection的实现是基于OkHttp。
一、同步请求-GET
// 创建一个OkHttpClient的实例
OkHttpClient client = new OkHttpClient();
//想要发起一条HTTP请求,就需要创建一个Request对象,可以在最终的build()之前连缀很多其他方法来丰富这个Request对象
Request request = new Request.Builder()
.url("http://www.baidu.com")
.build();
//调用OkHttpClient的newCall()方法来创建一个Call对象,并调用它的execute()方法来发送请求并获取服务器返回的数据
//response对象就是服务器返回的数据
Response response = client.newCall(request).execute();
//得到返回的具体内容
String responseData = response.body().string();
二、异步请求-GET
OkHttpClient ckient = new OkHttpClient();
Request request = new Request.Builder()
.url("http://www.baidu.com")
.build();
Call call = client.newCall(request);
call.enqueue(new Callback(){
@Override
public void onFailure(Call call, IOException e){
}
@Override
public void onResponse(Call call, Response response) throws IOException{
String responseData = response.body().string();
Log.d(TAG, str);
}
});
三、同步请求-POST
//创建一个OKHttpClient实例
OkHttpClient client = new OkHttpClient();
//如果要发起Post请求,则需要先构建一个RequestBody对象存放待提交的参数
RequestBody requestBody = new FormBody.Builder()
.add("username", "admin")
.add("password", "123456")
.build();
//然后在Request.Builder中调用一下post()方法,并将RequestBody对象传入
Request request = new Request.Builder()
.url("http://www.baidu.com")
.post(requestBody)
.build();
//调用execute()方法来发送请求并获取服务器返回的数据
Response response = client.newCall(request).