在Android开发框架中,比较重要的一个模块,就是网络请求模块。一个封装比较好的网络请求框架,会让开发者在发送请求和处理回调都十分方便。这篇文章就围绕着使用比较广泛的okhttp3来写,声明一下,本人不是大神,所以封装的并不完善,只是想给大家共享一下这个小小的成果。
我打算以3篇文章来介绍我是怎么封装okhttp3这个框架的,就是围绕着OkHttpClient, request, callback这三个主题来写。
本篇文章来配置request
上一篇文章已经介绍,okHttp3框架发送请求是通过调用OkHttpClient的newCall()方法,来传入Request对象实现的。
那么Request对象里面都有什么,接下来给大家介绍一下。
Request对象,主要配置:请求Url, 请求头, 请求参数。
我封装了一个Request工具类,用来封装适用于Get请求和Post请求,看代码:
Get请求:
public static Request createGetRequest(String url, RequestParams params, RequestParams headers){
StringBuilder urlBuilder = new StringBuilder(url).append("?");
if(params != null){
for(Map.Entry<String, String> entry: params.urlParams.entrySet()){
urlBuilder.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
}
}
//添加请求头
Headers.Builder mHeaderBuild = new Headers.Builder();
if (headers != null) {
for (Map.Entry<String, String> entry : headers.urlParams.entrySet()) {
mHeaderBuild.add(entry.getKey(), entry.getValue());
}
}
Headers mHeader = mHeaderBuild.build();
Request request = new Request.Builder().url(urlBuilder.substring(0, urlBuilder.length() - 1)).get().headers(mHeader).build();
Log.e("fangming", "requestUrl: " + request.url());
return request;
}
说明:
Get请求大家应该都熟悉,就是将参数拼接到Url后边。
Headers.Builder是okHttp3框架中用来生成请求头的构建类,将请求头参数以键值对的方式put进去即可。
接下来创建Request对象,传入拼接好的Url和创建的Header。就可以构建了Request对象了。
Post请求:
public static Request createPostRequest(String url, RequestParams params, RequestParams headers){
FormBody.Builder mFormBodyBilder = new FormBody.Builder();
if(params != null){
for(Map.Entry<String, String> entry: params.urlParams.entrySet()){
//将请求参数遍历添加到请求构建类中
mFormBodyBilder.add(entry.getKey(), entry.getValue());
}
}
//添加请求头
Headers.Builder mHeaderBuild = new Headers.Builder();
if (headers != null) {
for (Map.Entry<String, String> entry : headers.urlParams.entrySet()) {
mHeaderBuild.add(entry.getKey(), entry.getValue());
}
}
//获取真正的请求体
FormBody mFormBody = mFormBodyBilder.build();
Headers mHeader = mHeaderBuild.build();
Request request = new Request.Builder().url(url).post(mFormBody).headers(mHeader).build();
Log.e("fangming", "requestUrl: " + request.url());
return request;
}
说明:
Post请求跟Get请求不同,参数并不是直接拼接在Url之后,而是通过FormBody对象中,使用方法与Header对象相同,都是将键值对put进去。
然后创建Request对象,传入Url,FormBody和Header。就可以构建了Request对象了。
请求头和参数对象RequestParams是我查找资源后封装的一个集合对象类 ,里面加了一些异常处理和循环处理,其实使用普通的Map<String, String>
就可以。
okHttp3框架中,使用的都是创建者模式来创建对象,例如:OkHttpClient.Builder,FormBody.Builder(),Headers.Builder(),Request.Builder()。创建者模式又称建造者模式,是用来创建复杂对象的良策,虽然这个设计模式的使用并不多,但是还是了解一下比较好,这里就不多介绍了。