網(wǎng)絡(luò)框架Retrofit2.0

上一篇學(xué)習(xí)了okhttp的入門篇,這一篇學(xué)習(xí)的retrofit底層默認(rèn)使用的就是okhttp,相信大家多少也聽過(guò)這個(gè)框架澡谭,下面我們就來(lái)一起學(xué)習(xí)下,講真纺涤,學(xué)會(huì)之后這個(gè)框架用起來(lái)真的很爽译暂,特別靈活。

按照習(xí)慣先來(lái)說(shuō)一下它的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

可以配置不同HTTP client來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求撩炊,如okhttp外永、httpclient等

請(qǐng)求的方法參數(shù)注解都可以定制

支持同步、異步和RxJava

超級(jí)解耦

可以配置不同的反序列化工具來(lái)解析數(shù)據(jù)拧咳,如json伯顶、xml等

使用非常方便靈活

框架使用了很多設(shè)計(jì)模式(感興趣的可以看看源碼學(xué)習(xí)學(xué)習(xí))

缺點(diǎn):

不能接觸序列化實(shí)體和響應(yīng)數(shù)據(jù)

執(zhí)行的機(jī)制太嚴(yán)格

使用轉(zhuǎn)換器比較低效

只能支持簡(jiǎn)單自定義參數(shù)類型

相關(guān)學(xué)習(xí)資料的網(wǎng)址

retrofit官網(wǎng):http://square.github.io/retrofit/

github地址:https://github.com/square/retrofit

Simple HTTP with Retrofit2:

https://realm.io/news/droidcon-jake-wharton-simple-http-retrofit-2/

環(huán)境配置

在builde.gradle里面添加上

compile'com.squareup.retrofit2:retrofit:2.1.0'compile'com.squareup.retrofit2:converter-gson:2.1.0'compile'com.squareup.okhttp3:okhttp:3.4.1'

在AndroidManifest.xml添加所需權(quán)限

基本使用

?get異步請(qǐng)求



.baseUrl設(shè)置最基本url,也就是http請(qǐng)求的url前綴,可以把項(xiàng)目中重復(fù)的前綴用這個(gè)來(lái)設(shè)置

.addConverterFactory(GsonConverterFactory.create())是添加Gson數(shù)據(jù)解析ConverterFactory,后面會(huì)專門介紹下這個(gè),這里就不做過(guò)多解釋

ResponseBody這個(gè)是okhttp里面的對(duì)象骆膝,可以直接返回整個(gè)字符串祭衩,也可以獲取流的形式

post異步請(qǐng)求

POST與GET實(shí)現(xiàn)基本上是一樣的,只是把注解GET換成POST就OK.為了測(cè)試POST阅签,專門去網(wǎng)上找了個(gè)接口測(cè)試掐暮,下面就分享給大家,既可以用GET也可以用POST請(qǐng)求

http://www.kuaidi100.com/query?type=快遞公司代號(hào)&postid=快遞單號(hào) ps:快遞公司編碼:申通="shentong"EMS="ems"順豐="shunfeng"圓通="yuantong"中通="zhongtong"韻達(dá)="yunda"天天="tiantian"匯通="huitongkuaidi"全峰="quanfengkuaidi"德邦="debangwuliu"宅急送="zhaijisong"

拿著這個(gè)接口來(lái)實(shí)現(xiàn)一下POST異步請(qǐng)求




http://www.bejson.com/knownjson/webInterface/這網(wǎng)站里面還有一些其它免費(fèi)接口,感興趣的可以去看看

常用注解的使用介紹

上面GitHubService里面的注解大家應(yīng)該都能猜它的作用了吧政钟,下面就給大家介紹下

@GET和@POST分別是get和post請(qǐng)求路克。括號(hào)里面的value值與上面.baseUrl組成完整的路徑

@Path動(dòng)態(tài)的URL訪問(wèn)。像上面get請(qǐng)求中的{user}可以把它當(dāng)做一個(gè)占位符养交,通過(guò)@Path("user")標(biāo)注的參數(shù)進(jìn)行替換

@Query請(qǐng)求參數(shù)精算。無(wú)論是GET或POST的參數(shù)都可以用它來(lái)實(shí)現(xiàn)

@QueryMap請(qǐng)求參數(shù)使用Map集合∷榱可以傳遞一個(gè)map集合對(duì)象

@Body實(shí)體請(qǐng)求參數(shù)灰羽。顧名思義可以傳遞一個(gè)實(shí)體對(duì)象來(lái)作為請(qǐng)求的參數(shù),不過(guò)實(shí)體屬性要與參數(shù)名一一致

@FormUrlEncoded和@Field簡(jiǎn)單的表單鍵值對(duì)鱼辙。兩個(gè)需要結(jié)合使用廉嚼,使用如下:

@FormUrlEncoded@POST("user/edit")Call updateUser(@Field("first_name") String first, @Field("last_name") String last);

@Multipart和@PartPOST表單的方式上傳文件可以攜帶參數(shù)。兩個(gè)需要結(jié)合使用倒戏,使用方式查看下面文件上傳中介紹前鹅。

@PartMap和@PartPOST表單上傳多個(gè)文件攜帶參數(shù)。兩個(gè)結(jié)合使用峭梳,使用方式查看下面文件上傳中介紹。

這里只介紹了一些常用的,大家如果想了解更多可以查看相關(guān)文檔

文件上傳

1葱椭、單文件上傳攜帶參數(shù)(使用注解@Multipart和@Part)捂寿,需要在手機(jī)SD卡目錄下的Pictures文件夾下添加xuezhiqian.png圖片

@Multipart@POST("UploadServlet")Call uploadfile(@Part MultipartBody.Part photo, @Part("username") RequestBody username, @Part("password") RequestBody password);

2、多文件上傳攜帶參數(shù)(使用注解@PartMap和@Part),需要再在手機(jī)SD卡目錄下的Pictures文件夾下添加xuezhiqian2.png圖片

@Multipart@POST("UploadServlet")Call uploadfile(@PartMap Map params,? @Part("password") RequestBody password);

文件下載

可以采用OKHTTP下載文件的方式孵运,利用ResponseBody對(duì)象秦陋,調(diào)用response.body().byteStream()方法獲取InputStream輸入流,通過(guò)寫文件操作來(lái)實(shí)現(xiàn)治笨。

同步請(qǐng)求和結(jié)合RxJava的使用

1驳概、同步請(qǐng)求

Call.execute()同步請(qǐng)求網(wǎng)絡(luò),要注意的是Android4.0以后不能在主線程里調(diào)用旷赖,要開一個(gè)異步線程來(lái)使用顺又,

Call.enqueue()異步請(qǐng)求網(wǎng)絡(luò),加入一個(gè)回調(diào)等孵,同步異步需要可按照不同的場(chǎng)景來(lái)使用稚照。

Call.cancel()取消此次請(qǐng)求,有一些場(chǎng)景還是會(huì)用到該方法的俯萌。

2果录、結(jié)合RxJava使用

@POST("query")Observable searchRx(@Query("type") String type, @Query("postid") String postid);


配置OKHttp


鏈接:http://www.reibang.com/p/a94e38636fde

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市咐熙,隨后出現(xiàn)的幾起案子弱恒,更是在濱河造成了極大的恐慌,老刑警劉巖棋恼,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件返弹,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蘸泻,警方通過(guò)查閱死者的電腦和手機(jī)琉苇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悦施,“玉大人并扇,你說(shuō)我怎么就攤上這事÷盏” “怎么了穷蛹?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)昼汗。 經(jīng)常有香客問(wèn)我肴熏,道長(zhǎng),這世上最難降的妖魔是什么顷窒? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任蛙吏,我火速辦了婚禮源哩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸦做。我一直安慰自己励烦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布泼诱。 她就那樣靜靜地躺著坛掠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪治筒。 梳的紋絲不亂的頭發(fā)上屉栓,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音耸袜,去河邊找鬼友多。 笑死,一個(gè)胖子當(dāng)著我的面吹牛句灌,可吹牛的內(nèi)容都是我干的夷陋。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼胰锌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼骗绕!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起资昧,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤酬土,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后格带,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撤缴,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年叽唱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屈呕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棺亭,死狀恐怖虎眨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情镶摘,我是刑警寧澤嗽桩,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站凄敢,受9級(jí)特大地震影響碌冶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涝缝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一扑庞、第九天 我趴在偏房一處隱蔽的房頂上張望譬重。 院中可真熱鬧,春花似錦嫩挤、人聲如沸害幅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至狠怨,卻和暖如春约啊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背佣赖。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工恰矩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人憎蛤。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓外傅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親俩檬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子萎胰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 上一篇學(xué)習(xí)了okhttp的入門篇,這一篇學(xué)習(xí)的retrofit底層默認(rèn)使用的就是okhttp棚辽,相信大家多少也聽過(guò)這...
    肖賽Soaic閱讀 24,111評(píng)論 14 105
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,845評(píng)論 25 707
  • 1. “你說(shuō)年紀(jì)輕輕大好青年怎么那么想不開屈藐,非要談戀愛榔组。好好的發(fā)兩年財(cái)好不好,好好的自己浪兩年好不好联逻〈瓿叮”對(duì),這就是...
    七爺與七玥閱讀 598評(píng)論 0 0
  • 打賞指下黑白健包归,心事無(wú)名也醉人锨推。第一次真正喜歡上鋼琴是聽孩子大表姑為她彈奏的那段《水草舞》。這首極富感染力的樂(lè)曲選...
    葉如閱讀 1,087評(píng)論 0 0
  • 一整個(gè)下午的光 砸在她身上 遠(yuǎn)處 一棵冬日里的梧桐靜默著 仿佛在堅(jiān)守一種箫踩,難以啟齒的病癥 老人推著輪椅爱态,在小徑上散...
    f3494c632b49閱讀 940評(píng)論 46 49