专栏名称: 郭霖
Android技术分享平台,每天都有优质技术文章推送。你还可以向公众号投稿,将自己总结的技术心得分享给大家。
目录
相关文章推荐
鸿洋  ·  Android性能优化之绑定RenderTh ... ·  昨天  
鸿洋  ·  未来三年,最好保持随时离职的能力 ·  2 天前  
51好读  ›  专栏  ›  郭霖

Novate:对Retrofit2.0的又一次完美改进加强!

郭霖  · 公众号  · android  · 2016-09-23 07:31

正文

今日科技快讯


昨天相信所有人的朋友圈都被刷屏了,微信憋了许久的大招“应用号”终于开放小范围邀请式内测,并暂定命名为“小程序”。“小程序”的特点是使用方便,无须下载或安装应用,可能只需要扫一扫二维码就能够立即使用了。另外,开发语言是使用的HTML5+JS,相比于Android和iOS双终端开发,“小程序”的开发成本将会低很多。


那么有人也许会担心,“小程序”的出现会不会颠覆本地App的开发?这里我给出一个我的观点,“小程序”毫无疑问肯定会抢占本地App的市场份额,但如果说要颠覆,那还差得远呢。首先从它的命名上面看,“小程序”已经限定在“小”这个字上了,也就是说,一些功能简单的小应用,原本要独立开发出一个App的,现在非常适合入驻“小程序”平台,但是像QQ、淘宝这样的大程序,显示是不可能被微信收编的。另外,微信虽说有8亿用户,但毕竟也只是一个应用而已,平台还是Google和苹果的,尤其是像苹果这样的封闭式平台,很大一部分收入都是靠的第三方应用,如果将它的蛋糕都抢没了,苹果完全有可能将微信封杀掉。


另外,拒小道消息称,微信已经和苹果约法三章了,“小程序”一不碰游戏、二不碰直播,而且每个用户最多只能关注20个小程序号,算是双方都各退了一步。


作者介绍


度过了漫长的一周,明天终于可以放松休息一下了,这里提前祝大家周末愉快。


本篇是 Tamic(码小白) 的第二篇投稿,他的第一篇与大家分享了他在大公司的面试经验。今天他给大家带来了自己针对 Retrofit 结合 RxJava 的开源框架 Novate,让我们赶快来看一看吧~


Tamic(码小白)  的博客地址:

http://www.jianshu.com/users/3bbb1ddf4fd5


前言


用过 RxJava Retrofit 的朋友,用久了就会发现 Retrofit 说难吗 也不难,说简单吗 又不简单,对于实际项目中,单纯的用 Retrofit 做请求库,开发起来还是很多不便,必须要对请求头和参数处理,API接口 数目众多时的处理起来也不便, Https证书验签cookie持久错误结果码处理统一操作加载过渡UI 等,因此我对 Retrofit 再次进行了封装。


一直关注我的朋友以前看我封装的《 基于Retrofit2.0 封装的超好用的RetrofitClient工具类》的一文(这里指投稿作者的博客文章),已对 Retrofit 结合 RxJava 时遇到上面的问题进行了完整封装,但不是 Builder模式,因此感觉还是有点土,特此我进行了长达两个月 Novate 框架的开发。


为何起名为Novate?


Novate 的英文原意是用新事物代替 ,我开发目的是用新的东西来代替 Retrofit 的有些不易操作的地方,因此起名新奇的东西,所以结合了原来的Http用法习惯,又加入了 Retrofit RxJava 的特性,因此起名 :Novate


*继续阅读本文最好先了解 Retrofit 和 Rxjava。


介绍


Novate 的改进:


  • 加入基础API,减少Api冗余

  • 支持离线缓存 无网络智能加载缓存

  • 支持多种方式访问网络(get, put, post ,delete

  • 支持文件下载和上传

  • 支持请求头参数统一添加

  • 支持对返回结果的统一处理

  • 支持自定义的扩展API,默认Api无法满足时可自定义

  • 支持统一请求访问网络的流程控制,帮你自动启动 过渡LoadingProcessbar 支持从外部自定义。


用法


基本构建:


Novate novate = new Novate.Builder(this)
   .baseUrl(baseUrl)
   .build();


除了基本的构建还提供更了其他API:


//构建你的header头和参数
Map headers = new HashMap(); headers.put("apikey", "4545sdsddfd7sds");
Map parameters = new HashMap(); parameters.put("uid", "878787878sdsd");


实例化:


Novate novate = new Novate.Builder(this)
  .addParameters(parameters)
  .connectTimeout(8)
  .baseUrl("you api url")
  .addHeader(headers)
  .addLog(true)
  .build();


如果你需要接入证书:


novate.addSSL(hosts, certificates)


怎么用?


int[] certificates = {R.raw.myssl1, R.raw.myssl2,......}
int[] hosts = {"https:// you hosturl2", "https:// you hosturl2",......}


还要说明?


certificates 是你的 ssl证书文件的id,项目中请放到 raw资源文件下,myssl.cer 怎么生成,这个就不是我这边讲的内容,请用pc浏览器自动导出证书,保存, 还不清楚的话,我会醉醉。


同样很多人想问 我想对 novate 进行扩展,咋办,别担心,Novate 也提供了以下方法:


novate.addInterceptor()
  .addCallAdapterFactory()
  .callFactory()
  .client()


不知道啥意思?


请对 Retrofit 去入门,Retrofit 中怎么用,Novate 就怎么用。


RxJava 怎么处理?


observable.subscribeOn(Schedulers.io())
  .unsubscribeOn(Schedulers.io())
  .observeOn(AndroidSchedulers.mainThread());


内部统一已进行线程控制,所有请求都采用以上线程形式,无需你手动添加。


Get


提供了 novate.executeGet()novate.get()  API,区别如下:


  • executeGet 来执行get请求,此方法会解析返回你需要的bean实体

  • novate.get() 不会帮你解析实体,需要你自己对返回数据解析进行序列化。




如果你不需要 Novate 帮你解析返回的数据 则调用 novate.get()




Post


提供了 novate.post()novate.executePost() 两个 API。


区别如下:


  • executePost 来执行Post方式请求,此方法对结果解析返回你需要的bean实体。

  • novate.post() 不会帮你解析实体,需要你自己对返回数据解析进行序列化。


post get 代码用法很相似:


novate.post()




novate.executePost():




Put


put 方式则提供了 novate.put() novate.executePut() 两个API,区别和用法参考上面 Get Put


Delete


同样对 delete 提供了novate.delete()novate.executeDelete() 两个API,区别和用法参考上面 Get Put


Upload


当然 novate 特提供了可供上传文件的API novate.upload()




Download


如果说有上传文件的接口,必定有下载文件的接口,同样 novate 也提供了下载文件API novate.download()




Custom Api


以上方法默认会处理 Novate 自带的 BaseApiService,如果默认的BaseApiService 无法满足你的需求时,Novate 同样支持你自己的 ApiService


定义一个你自己的API:


MyApi




Execute Call


通过 novate 提供 create() 实例化你的API:


MyAPI myAPI = novate.create(MyAPI.class);


通过 novate.call() 来执行你的接口,你也不用关心,novate 内部同样已进行 RxJava 线程控制:




结束


如果你对本框架有无法满足你的需求或有何更好的想法,请及时联系我进行交流,谢谢您的支持!欢迎您的star. Tamic期待更多的技术大牛开车指导!


GitHub:

https://github.com/NeglectedByBoss/Novate


更多