Retrofit实践

一,Retrofit的前世今生

Retrofit(A type-safeHTTP clientfor Android and Java),美国square公司开发的,个人理解就是一个第三方库,运用android和java的网络库,通俗来说就是把我们底层的网络访问给封装好了,并且具有线程和网络安全的优点,支持lambda语法,内部支持okhttp, 并且支持响应式RxJAava。

如何在底层封装的?

答:在没有okhttp之前,把我们那些自己要写的post,get,pull,delete等完美封装成注入的形式,对http的接口在进行一次自我的封装,然后实现其方法,Retrofit实现接口的方法创建一个api,这个api其实包含了一个call,每个call里面其实都实现了同步或者异步的http请求。

我简单的画了个草图:

详细参考官网:http://square.github.io/retrofit/

二,Demo

讲太多理论的东西都是瞎扯淡,直接干点实事吧。以登录为例(请求web登录的模式):

备注使用时我们需要在gradle配置下:

编译之后我们会发现项目中多了几个类库:

well,现在环境准备好,那就开始编码吧,先列举下,在不用Retrofit的情况我通常会这样使用:

利用异步线程解决ui更新的问题,好像这样也可以。

现在用Retrofit来做同样的事情对比下:

首先针对于这个简单的功能,我们先一种MVC的思想捋下他的架构。

View -- Model -- Control

View: 在这里就是一个简单的xml,给其name和pass

Model: 就是把业务封装在Retrofit里面,构建Retrofit的类

Control: 就是通过callback的数据进行不同的数据流向。

着重讲model边上代码边讲解:

这是核心部分,不难看出这里还会用到一个RetrofiApi,LoginListener自己定义的接口。分别来讲下:

首先我们得知道Retrofit创建后就等于是拿到了一个工具箱,这里面各种的设置满足你的需求,可是如何实现自己的业务,那就看自己的api要做些什么了,比如我这里api:

RetrofitApi:

public interfaceRetrofitApi {

@GET("login/")

CallmachResult(@Query("name") String name,@Query("pass") String pass);}

可以看出就是正儿八经的网络访问,用get的请求方式,把username和password的传给服务器。@GET("login/")看到这个标识知道ssh框架的都知道这是一种跳转的方向指向,代表的是login的方法而不是其他。这里的Call泛指了我们自定义的LoginListener,也就是说会把执行结果反馈给我们自己的callback。接着便是我们对执行结果的处理了。

走到这里的时候,聪明的小伙伴已经恍然大悟了,好简单啊,Retrofit其实最强大的部分就是通过他可以随意创建自己的api,想怎么玩就怎么玩,也不用担心网络的安全,异步等问题,反正底层都给我们封装好了。

截止目前便完成了一个很小的demo。

三,Retrofi的扩展功能:

A.Log输出:

// log 输出

Retrofit retrofit1 =newRetrofit.Builder().client(newOkHttpClient.Builder()

.addNetworkInterceptor(newHttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.HEADERS)).build());

B. Header加入:

// 增加头部信息

newRetrofit.Builder()

.addConverterFactory(GsonConverterFactory.create())

.client(newOkHttpClient.Builder()

.addInterceptor(newInterceptor() {

@Override

publicokhttp3.Responseintercept(Chain chain)throwsIOException {

Request request = chain.request()

.newBuilder()

.addHeader("test","test")

.addHeader("test","test")

.addHeader("test","test")

.addHeader("test","test")

.build();

returnchain.proceed(request);

}

})

.build();

C: 添加代理,https,加入证书等:

都是在okHttpclient里操作然后塞给Retrofit,比如:

Proxy proxy =newProxy(Proxy.Type.HTTP,  newInetSocketAddress("",""));

OkHttpClient client =newOkHttpClient.Builder().proxy(proxy).build();

newRetrofit.Builder().client(client);

D: 关于Rxjava在Retrofit里的使用

newRetrofit.Builder().addCallAdapterFactory(RxJavaCallAdapterFactory.create());

可以看出Retrofit提供了不同的适配工厂,在这里你可以塞进去自己的工厂,比如RxJavaCallAdapaterFActory(自己创建的)。关于这一点,感兴趣的小伙伴可以再做深入的探究。

三,总结

Retrofit用起来看似很方便,但是个人觉得实际强大的还是okhttp,他对okhttp的依赖还是很大,只不过是在用户的使用的时候方便,代码简介明了,但是并不是完美的,对于知识个人觉得合适的才是最好的,但是必须得了解,毕竟是靠这个吃饭的。:)

以上是我自己的实践总结,不足之处欢迎指出!

下一篇有时间会研究网络安全和证书的问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,856评论 25 707
  • Retrofit用法详解 一、简介 Retrofit是Square公司开发的一款针对Android网络请求的框架,...
    流水潺湲阅读 847评论 0 6
  • - 写在开始 其实早就注册简书了,但是一直把这当作一个看人家文字的平台,从来没有想过要在上面写点东西,因为...
    iReturner阅读 249评论 0 1
  • 惊蛰节气春雨绵绵,计划了很久想要出游一次,一直都没有成行。偶得机会和一群小伙伴一块去植物园赏花,尽管在生活了很久的...
    驽马为啸阅读 266评论 0 1