Retrofit(二)

我也不打算讲POST,GET这些表单提交啊的做法。这把讲几个比较重要的东西。

一.Retrofit

使用Retrofit第一个套路就是创建它的实例,不管用什么都要创建实例吧。

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("http://localhost:4567/")
        .build();

从最简单的用法可以看出它用了build模式,可以说这设计非常的用心。我们来看看Builder这个内部类中的的方法(不知道build模式的最好先学一下,不难的)。这里教大家一个方法浏览这个类中有什么方法。只需要在AS的最左边点开Structure

image.png

就讲一些比较常用到的(不,是只讲我懂的,我不懂的也没法扯)。

1.baseUrl

这个就不用说了吧,两个baseUrl是内部相互调用的,源码单独抽出来不好讲,知道它的功能是设置基本的路径就行。

2.addConverterFactory

这是添加ConverterFactory,是用于转换响应体,过后会详细讲。

3.addCallAdapterFactory

这是添加CallAdapter,关于CallAdapter其实我也没去看,因为我用RxJava的,我觉得RxJava已经是很好用了,没必要再自己去定义CallAdapter(是我这种渣渣没必要,大神一般都喜欢用自己自定义的东西)

4.callbackExecutor

也是处理返回值,不过是用在同步的时候,我们平时一般都是用异步。

5.client

这是用于配置内部的OkHttp,平时也很常用到。

最后常用配置后:
Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(okHttpClient) //okHttpClient过后会说常用的创建
                .addConverterFactory(FastJsonConvertFactory.create())// 可以用Gson
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

二.两个Factory

平时用到的addConverterFactory就是Gson,有时候可能需要用到xml,平时用到的addCallAdapterFactory就是Rxjava,或者可以不使用,我一直都是用RxJava,因为好用。
addConverterFactory有时候需要自定义,所以我上一篇说了这个要学会怎么去自定义。

三.RequestBody

毫无疑问请求体是个很重要的东西, 我以前用过volley好像记得要自己弄请求体,而Retrofit在普通的post和get请求时并不需求拿到实例化的请求体对象,内部会帮你做好了,但是有时也需要对RequestBody进行一些操作。

那么最常直接用到RequestBody的地方是哪里呢,就是文件的上传。
文件上传的整个过程我肯定是到后面才会讲的,所以这个地方讲的时候可能会有些看不懂,没关系,大不了看完后面再看前面。

先来一发RequestBody的结构

image.png
1.contentLength()

这个是返回将要写入的字节数,默认是-1,表示不确定要写入多少,这个不常用到的,但是有些特殊需求可能会用到。

2.contentType()

返回Content-Type,就是

image.png

上传文件使用使用multipart是这样的一个格式,分割线里面的是一个文件,最好要把分割线内的格式背下,最好要把分割线内的格式背下,最好要把分割线内的格式背下,重要的事说三遍,这个格式是固定的,是相互约定形成的,你会看到里面有个Content-Type的字段。
contentType()方法就是返回这个,如果是这里的请求,返回的就是image/jpeg。

记住,这个方法返回的是MediaType类型,你只需要先知道MediaType这个类可以把它当成是描述Content-Type的字段。

3.writeTo

这个方法的注解是“将此请求的内容写入sink”,我也读不懂是什么意思。可以看看BufferedSink

image.png

说的大概就是一个缓冲区,也不是很了解,之后用到再具体学吧。

4.create

这个方法有重载,你会发现第一个参数是Content-Type的字段,第二个参数常用的一般用byte[]和File。

实际使用

你会发现,一般传图片时都会这样写,例如:

 RequestBody photoRequestBody = RequestBody.create(MediaType.parse("image/png"), file);

这一个参数就是Content-Type,第二个参数他这里传file,当然传byte或者其它也行。

四.ResponseBody

image.png

方法比RequestBody多,但是很多方法的作用都能从图中看懂,比如说byteStream就是获取InputStream。方法太多了也不好一个一个讲,之后将下载文件时会有个需求是监听下载进度,到时候再详细讲这个ResponseBody常用的方法。

五.OkHttpClient

在前面的创建Retrofit对象时,有一个client()方法,里面传的对象就是OkHttpClient类,也就是说如果我们需要配置一些请求时的配置(请求头、请求时间什么之类的),我们就需要在创建Retrofit时调用client()方法,所以我们就需要创建一个OkHttpClient对象。
OkHttpClient类也是封装得很好,也是使用Builder模式,所以使用起来非常方便,我们来看看创建时可以调用哪些方法。

image.png
image.png
1.connectTimeout、readTimeout、writeTimeout

这很简单,设置连接时、写入时、读取时的超时时间。

2.cookieJar

这个是设置cookie

3.setInternalCache、cache

设置缓存,要自己创建InternalCache对象或者Cache对象,一般都是调用cache的吧。

4.interceptors和networkInterceptors

这个是返回一个拦截器数组,拦截器,什么是拦截器,我怎么感觉我好像要全部讲完OkHttp的过程,总之先了解这个是返回一个拦截器数组。

5.addInterceptor和addNetworkInterceptor

设置单个拦截器到拦截器数组中

比如我们一般,不是一般,可以说是必须,设置日记拦截器,这样就能在Logcat中打印请求和响应的过程。

HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
builder.addInterceptor(logging);

这只是举个例子,还可以设置很多拦截器,包括自定义的拦截器。如果有时间会单独写一篇关于okhttp的,所以这里不多讲。

5.proxy

设置由该客户端创建的连接将使用的HTTP代理。

6.sslSocketFactory

设置用于保护HTTPS连接的套接字工厂和信任管理器。这个是和证书有关的,我http懂得也不是很多,不知道要怎么解释,反正就是如果是用Https的话要写这个方法,百度上也有教要怎么写。


好了,这样就能创建传出一个Retrofit对象,并对一些常用到的对象和方法有了一定的了解,要想深入去使用,讲真还是要去看源码,源码这么多,我不是大神,我不可能全部讲完,而且也没那个时间,我只能随便东扯扯西扯扯,所以要弄懂一个东西,还是要靠自己

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

推荐阅读更多精彩内容