okhttp3相关封装配置(二):Request对象
来源:互联网 发布:sqoop 数据导入hive 编辑:程序博客网 时间:2024/06/03 13:53
在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()。创建者模式又称建造者模式,是用来创建复杂对象的良策,虽然这个设计模式的使用并不多,但是还是了解一下比较好,这里就不多介绍了。
- okhttp3相关封装配置(二):Request对象
- okhttp3相关封装配置(一):OkHttpClient的参数配置
- okhttp3相关封装配置(三):Callback封装,添加onStart()和onFinish()回调方法
- 【OkHttp3源代码分析】(二)Request的enqueue
- 【OkHttp3源代码分析】(二)Request的enqueue
- 优雅设计封装基于Okhttp3的网络框架(六):HttpHeader接口设计实现 及 Response、Request封装实现
- OkHttp3封装
- okhttp3封装
- OkHttp3封装
- 封装OkHttp3
- OkHttp3源码分析(二)
- 网络请求工具类之OkHttp3封装(二)上(支持请求取消、异步请求的线程切换)
- 网络请求工具类之OkHttp3封装(二)下(支持请求取消、异步请求的线程切换)
- 优雅设计封装基于Okhttp3的网络框架(二):多线程下载功能原理设计 及 简单实现
- [收藏] request 相关对象参考
- okHttp3自用封装
- okhttp3极简封装
- OkHttp3的简单封装
- Sublime Text3安装
- Android模拟器创建与启动
- [ JS 进阶 ] test, exec, match, replace
- CHAPTER 11-Training Deep Neural Nets-part3
- 解析WEB开发编码问题
- okhttp3相关封装配置(二):Request对象
- 去掉设置中的bluetooth、location、more
- 从大数据中随机采样与排列----groupby与apply的应用
- Android字体设置,Roboto字体使用
- js--打卡--12.05 String对象方法
- php写注册接口给第三方调用
- Java开发-Java中生产者与消费者设计模式的实现
- Xml的dtd约束
- 马云在2017乌镇互联网大会讲了这三个观点