30秒上手新一代Http請求神器RxHttp

開胃菜

話不多說芥颈,30s倒計時開始,先來看看如何發(fā)送一個Get請求赚抡,如下:

RxHttp.get("http://...")  //第一步爬坑,確定請求類型,這里為Get請求           
    .asString()           //第二步涂臣,確定返回類型盾计,這里返回String類型      
    .subscribe(s -> {     //第二步,訂閱觀察者赁遗,第二步返回Observable對象
        //請求成功                                         
    }, throwable -> {                                  
        //請求失敗                                         
    });                                                

Ok闯估,倒計時結(jié)束!:鸷汀涨薪! 到這,你已經(jīng)學(xué)會了RxHttp的精髓炫乓。

是的刚夺,不用懷疑献丑,就是這么簡單,使用RxHttp侠姑,任意請求创橄,任意返回數(shù)據(jù)類型,都遵循這三個步驟莽红,我們稱之為請求三部曲妥畏。

重要事情說3遍

任意請求,任意返回數(shù)據(jù)類型安吁,皆遵循請求三部曲

任意請求醉蚁,任意返回數(shù)據(jù)類型,皆遵循請求三部曲

任意請求鬼店,任意返回數(shù)據(jù)類型网棍,皆遵循請求三部曲

gradle依賴

implementation 'com.rxjava.rxhttp:rxhttp:1.0.9'
//注解處理器,生成RxHttp類妇智,即可一條鏈發(fā)送請求
annotationProcessor 'com.rxjava.rxhttp:rxhttp-compiler:1.0.9'

注:RxHttp類是通過注解處理器自動生成的滥玷,故需要您在項目中使用一處注解,然后rebuild 一下項目巍棱,RxHttp即可以生成惑畴。注解使用,請查看RxHttp 一條鏈發(fā)送請求之注解處理器 Generated API(四)

三部曲解說

到這里相信很多人已經(jīng)有疑問了

  • 如果我想發(fā)送Post等其它方式請求呢航徙?
  • 文件上傳下載及進度的監(jiān)聽呢如贷?
  • 我想得到自定義的數(shù)據(jù)類型呢?

這些如何通過三部曲實現(xiàn)呢捉偏?別著急倒得,接下來一一為大家講解

第一步泻红,確定請求方式

上面例子中夭禽,我們調(diào)用了RxHttp.get("http://...")語句,其中get操作符就代碼Get請求谊路。由此讹躯,我們可以猜測,發(fā)送Post請求缠劝,只需要調(diào)用post操作符即可潮梯。然而我們只猜對了一半,為啥這么說呢惨恭?Post請求中秉馏,我們常見的又分為兩種,一種的表單形式的Post脱羡,另一種是Json字符串形式的Post萝究。為此免都,RxHttp提供了兩個發(fā)送Post請求的操作符,分別是postFormpostJosn帆竹,此時绕娘,我們就可以這樣發(fā)送Post請求

RxHttp.postForm("http://...")  //發(fā)送表單形式的Post請求           
    .asString()                //返回String類型      
    .subscribe(s -> {          //訂閱觀察者,
        //請求成功                                         
    }, throwable -> {                                  
        //請求失敗                                         
    });  
    
RxHttp.postJson("http://...")  //發(fā)送Json字符串單形式的Post請求           
    .asString()                //返回String類型      
    .subscribe(s -> {          //訂閱觀察者栽连,
        //請求成功                                         
    }, throwable -> {                                  
        //請求失敗                                         
    });    

如果想發(fā)送Delete险领、Put等其它方式的請求,同理秒紧,如下:

RxHttp.deleteForm("http://...")
RxHttp.deleteJson("http://...")
RxHttp.putForm("http://...")
RxHttp.putJson("http://...")
//其它請求方式同上

最后绢陌,我們來看下,RxHttp都提供了哪些請求方式噩茄,如下:

image

其中get下面、postFormpostJson上面已經(jīng)講過了绩聘,其它的同理沥割,這里就不再講述了。

請求方式確定了凿菩,如何添加參數(shù)或者頭像信息呢机杜?so easy!!!,只需調(diào)用add衅谷、addHeader即可椒拗,如下:

RxHttp.postForm("http://...")  //發(fā)送表單形式的Post請求     
    .add("key","value")        //添加請求參數(shù),該方法可調(diào)用多次                 
    .addHeader("headerKey","headerValue")  //添加請求頭參數(shù)获黔,該方法可調(diào)用多次 
    .asString()                //返回String類型      
    .subscribe(s -> {          //訂閱觀察者蚀苛,
        //請求成功                                         
    }, throwable -> {                                  
        //請求失敗                                         
    }); 

第二步,確定返回數(shù)據(jù)類型

上面的asString操作符代表返回String字符串類型玷氏,RxHttp提供了17asXXX操作符堵未,如下:

image

其中,asBoolean盏触、asInteger渗蟹、asLong、asString等赞辩,我想很好理解雌芽,就是返回基本類型的裝箱類型,這個不就過多講解辨嗽。這里我們重點看下asObject世落、asListasDownload這3個操作符糟需。

asObject

顯示開發(fā)中屉佳,我們返回的更多是自定義的數(shù)據(jù)類型来破,比如我們想得到一個Student對象,此時忘古,我們就可以用asObject操作符徘禁,如下:

RxHttp.get("http://...")       //發(fā)送Get請求         
    .asObject(Student.class)   //指定返回User類型數(shù)據(jù) 
    .subscribe(student -> {    //訂閱觀察者,
        //請求成功,這里student就是Student對象                                         
    }, throwable -> {                                  
        //請求失敗                                         
    });  
asList

然而髓堪,如果我們想得到一系列Student對象呢送朱?使用asObject顯然行不通,此時就要用到asList操作符了干旁,如下:

RxHttp.get("http://...")        //發(fā)送Get請求         
    .asList(Student.class)      //指定返回User類型數(shù)據(jù) 
    .subscribe(students -> {    //訂閱觀察者驶沼,
        //請求成功,這里students就是List<Student>對象                                         
    }, throwable -> {                                  
        //請求失敗                                         
    });  

注:asXXX操作符,內(nèi)部會默認指定請求在Schedulers.io()線程執(zhí)行

asDownload

當我們需要下載文件争群,就用此操作符回怜,如下:

 RxHttp.get("http://...")        //Get請求                         
     .asDownload(".../rxhttp.apk")  //使用asDownload操作符,并傳入存儲路徑
     .subscribe(s -> {                                       
         //下載成功回調(diào)换薄,s為文件存儲路徑                                   
     }, (OnError) throwable -> {                             
         //下載失敗回調(diào)                                            
     });                                                     

更多文件操作玉雾,請查看Android 史上最優(yōu)雅的實現(xiàn)文件上傳、下載及進度的監(jiān)聽

第三步轻要,訂閱觀察者

在上一步中复旬,細心的你也許發(fā)現(xiàn)了,使用了asXXX操作符后冲泥,會返回一個Observable對象驹碍,那這個又是什么對象呢?其實它就是RxJava內(nèi)部的Observable對象凡恍。

在這志秃,可以告訴你,當我們調(diào)用asXXX操作符嚼酝,拿到Observable對象后浮还,RxHttp就已經(jīng)完成了它的使命,接下來的事情都丟給了RxJava革半。拿到Observable對象碑定,結(jié)合RxJava強大的操作符流码,我們可以做非常多的事情又官,比如我們想要在主線程回調(diào)觀察者,如下:

RxHttp.get("http://...")        //發(fā)送Get請求         
    .asList(Student.class)      //指定返回User類型數(shù)據(jù) 
    .observeOn(AndroidSchedulers.mainThread())  //主線程回調(diào)觀察者
    .subscribe(students -> {    //訂閱觀察者漫试,
        //請求成功,這里students就是List<Student>對象                                         
    }, throwable -> {                                  
        //請求失敗                                         
    });  

注:請求默認在Schedulers.io()線程執(zhí)行六敬,如未指定觀察者所在線程,則默認在請求所在線程回調(diào)

小結(jié)

好了驾荣,請求三部曲就講解結(jié)束外构,到這普泡,你已經(jīng)掌握了RxHttp 70% 的功能,并且掌握了RxHttp的精髓----請求三部曲审编,在任意請求中撼班,就能做到以不變應(yīng)萬變。
本篇文章的目的在于提供一個簡單的入門教程垒酬,更多功能請查看

RxHttp 一條鏈發(fā)送請求砰嘁,新一代Http請求神器(一)

RxHttp 一條鏈發(fā)送請求之強大的數(shù)據(jù)解析功能(二)

RxHttp 一條鏈發(fā)送請求之強大的Param類(三)

RxHttp 一條鏈發(fā)送請求之注解處理器 Generated API(四)

Android 史上最優(yōu)雅的實現(xiàn)文件上傳、下載及進度的監(jiān)聽

問題簡答

最后勘究,借此機會矮湘,簡單解答一下讀者反饋的問題

1、RxHttp支持Https嗎口糕?

答:支持缅阳,RxHttp內(nèi)置默認的OkHttpClient對象,如下:

new OkHttpClient.Builder()                                    
    .connectTimeout(10, TimeUnit.SECONDS)                     
    .readTimeout(10, TimeUnit.SECONDS)                        
    .writeTimeout(10, TimeUnit.SECONDS)                       
    .sslSocketFactory(sslSocketFactory, trustAllCert) //添加信任證書
    .hostnameVerifier((hostname, session) -> true) //忽略host驗證 
    .build();                                                 

2景描、RxHttp支持緩存處理嗎十办?

答:支持,但是RxHttp默認沒有做任何緩存處理超棺,如有需要橘洞,請自定義OkHttpClient對象開啟緩存,并使用RxHttp發(fā)送請求時说搅,使用cacheControl(CacheControl cacheControl)設(shè)置緩存策略

3炸枣、RxHttp如何支持session或者token?

答:session或者token涉及到具體的業(yè)務(wù)邏輯弄唧,故RxHttp暫時并沒有做深度封裝适肠。如有需要,可自定義OkHttpClient對象通過攔截器去實現(xiàn)候引。

4侯养、RxHttp支持kotlin嗎?

答:必須支持澄干,但是依賴注解處理器時逛揩,需要使用kapt代替annotationProcessor

5、RxHttp如何支持多任務(wù)列表下載

答:在最新的Demo中麸俘,已有案例辩稽,歡迎下載Demo體驗

在使用過程中,如遇到什么問題从媚,環(huán)境加群交流RxHttp&RxLife 交流群:378530627

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逞泄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喷众,老刑警劉巖各谚,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異到千,居然都是意外死亡昌渤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門憔四,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愈涩,“玉大人,你說我怎么就攤上這事加矛÷耐瘢” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵斟览,是天一觀的道長毁腿。 經(jīng)常有香客問我,道長苛茂,這世上最難降的妖魔是什么已烤? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮妓羊,結(jié)果婚禮上胯究,老公的妹妹穿的比我還像新娘。我一直安慰自己躁绸,他們只是感情好裕循,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著净刮,像睡著了一般剥哑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淹父,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天株婴,我揣著相機與錄音,去河邊找鬼暑认。 笑死困介,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蘸际。 我是一名探鬼主播座哩,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捡鱼!你這毒婦竟也來了八回?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤驾诈,失蹤者是張志新(化名)和其女友劉穎缠诅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乍迄,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡管引,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了闯两。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褥伴。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖漾狼,靈堂內(nèi)的尸體忽然破棺而出重慢,到底是詐尸還是另有隱情,我是刑警寧澤逊躁,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布似踱,位于F島的核電站,受9級特大地震影響稽煤,放射性物質(zhì)發(fā)生泄漏核芽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一酵熙、第九天 我趴在偏房一處隱蔽的房頂上張望轧简。 院中可真熱鬧,春花似錦匾二、人聲如沸哮独。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽借嗽。三九已至,卻和暖如春转培,著一層夾襖步出監(jiān)牢的瞬間恶导,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工浸须, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惨寿,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓删窒,卻偏偏與公主長得像裂垦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肌索,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353