使用OkHttp
在当今开源盛行的今天,有许多出色的网络通信库,其中不乏包括HttpURLConnection,HttpClient,OkHttp,而OkHttp无疑是做的最出色的一个。
Okhttp
Okhttp是由大名鼎鼎的Square公司开发的,Okhttp不仅走起接口封装上面做的简单易用,就连底层的实现上也是自成一派,比起原生的HttpURLCommection,可以说是有过之而无不及。OkHttp项目主页地址https://github.com/square/okhttp。
使用之前的准备
#在使用之前,我们需要在项目中添加OkHttp库的依赖。编辑app/build.gradle文件,在dependencies闭包中添加如下内容:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'junit:junit:4.12'
implementation 'com.github.bumptech.glide:glide:3.7.0'
implementation 'org.litepal.android:core:1.4.1'
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
implementation 'com.google.code.gson:gson:2.7'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'org.litepal:LitePal:1.2.0'
}
添加上述依赖会自动下载两个库,一个是OkHttp库,一个是Okio库,后者是前者的通信基础。
OkHttp具体用法
首先需要创建一个OkHttpClient的实例,如下所示:
OkHttpClient client = new OkHttpClient();
接下来如果想要发起一条HTTP请求,就需要创建一个Request对象:
Request request = new Request.Builder().build();
当然,上述代码只是创建了一个空的Request对象,我们可以在最终的build()方法之前连缀很多其他方法来丰富这个Request对象。比如可以通过url()方法来设置目标的网络地址:
Request request = new Request.Builder().url(address).build();
之后调用OkHttpClient的newCall()方法创建一个Call对象,并调用它的execute()方法来发送请求并获取服务器返回的数据
Response response = client.newCall(request).execute();
其中Response对象就是服务器返回的数据了,我们可以使用如下写法来得到返回的具体内容:
String reponseData = response.body().string();
Okhttp发起一条Get请求
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(address).build();
client.newCall(request).enqueue(callback);
以上是发起一条Get请求,如果是一条Post的请求,情况则有一点不同
首先构建一个request body对象,存放待提交的数据
RequestBody requestBody = new FormBody.Builder().add("username","admin").add("password","123456").build();
然后在Request.Builder中调用一下post()方法,并将RequestBody对象传入:
Request request = new Request.Builder().url(address).post(requestBody).build();
OkHttp发起一条Post请求
OkHttpClient client = new OkHttpClient();
//构建一个requestBody对象存放待提交的参数
RequestBody requestBody = new FormBody.Builder().add("username","admin").add("password","123456").build();
//调用post方法,将requestBody对象传入
Request request = new Request.Builder().url(address).post(requestBody).build();
client.newCall(request).enqueue(callback);