retrofit2集成(webService、http)
适用环境
1、项目中既有webService服务,也有http服务;
2、项目原有服务是webService或者http其中的一种,由于需求变更等原因要更换服务类型,同时要在不影响原来的服务请求的情况下进行网络框架重构;
3、写服务的换人了;<或者服务人员想装逼,彰显他会多种服务语言>
retrofit2简单介绍
retrofit是由Square公司出品的针对于Android和Java的类型安全的Http客户端。
简单的说就是一种网络请求框架,对okHttp的封装,使用面向接口的方式进行网络请求,利用动态生成的代理类封装了网络接口请求的底层,其将请求返回javaBean,对网络认证 REST API进行了很好对支持此,使用Retrofit将会极大的提高我们应用的网络体验。
【其实自己是看了github上的网络框架使用统计,排名第一的就是retrofit,所以就去稍稍的研究了一下,发现还挺好用,毕竟这热度可不是水军给刷上去的。】
下面就以我自己的项目中的例子来给大家演示一下今天的核心内容:
实例讲解
一、情景重现
为了迎合后台服务人员(以前公司的后台只会写webService)的服务类型,我们移动端选择采用比较常用ksoap网络请求框架来请求webService服务,首先以图片的形式看一下项目中ksoap网络请求的封装类。
以上就是原来项目中用到的ksoap网络请求帮助类,看起来也还OK,但是在实际的项目中,每到一次网络请求就要new出来一个handler或者asyncTask去处理网络请求,并且代码写起来很长很冗余,导致一个页面有多个请求的时候,光关于网络请求的代码就一大堆。另外原来的项目也灭有框架可言,基本大部分的代码都在activity或者fragment中,导致界面工作效率过低,代码过于混乱。
【这里有个不大不小的坑,注意图片中红色部分,留着到后面再讲QAQ】
基于这样的情况,项目组经过商议后决定要重构项目,其中就包括网络请求框架。要求在不改变以前程序代码的基础下进行代码重构。所以经过慎重考虑后,决定将retrofit2集成进我们的项目中去。
二、retrofit集成
1、首先导入retrofit2的相关依赖:
//retrofit网络框架
compile 'com.squareup.retrofit2:retrofit:2.3.0' //retrofit2.3.0类库
compile'com.squareup.retrofit2:converter-scalars:2.3.0' //关于字符串的转换器
compile 'com.squareup.retrofit2:converter-gson:2.3.0' //关于gson的转换器
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1' //okhttpClient的log拦截器
2、http请求:
依赖包导入成功后就可以放肆的利用retrofit2进行实验了,首先用一个简单的http请求测试一下是否能走通。
public interface PostApi {
/**
* 上传错误信息接口
* */
@POST("api/OPERATION_ERROR_STATISTICS")
Call<ResponseBody> postError(@Body ErrorBean bean);
}
以上是一个简单的post请求接口。
【实体类就不贴了,自定义任何一个实体类都可以】
然后是请求的方法及回调:
public void errorPost(List<CrashBean> list){
//创建retrofit
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ActionNet.BASE_URL)
.client(getOkHttpClient())
.addConverterFactory(GsonConverterFactory.create())
.build();