話很少說,30s倒計時開始,先來看看如何發送一個Get請求,以下:java
RxHttp.get("http://...") //第一步,肯定請求類型,這裏爲Get請求
.asString() //第二步,肯定返回類型,這裏返回String類型
.subscribe(s -> { //第三步,訂閱觀察者,第二步返回Observable對象
//請求成功
}, throwable -> {
//請求失敗
});
複製代碼
Ok,倒計時結束!!! 到這,你已經學會了RxHttp的精髓。git
是的,不用懷疑,就是這麼簡單,使用RxHttp,任意請求,任意返回數據類型,都遵循這三個步驟,咱們稱之爲請求三部曲。github
重要事情說3遍緩存
任意請求,任意返回數據類型,皆遵循請求三部曲session
任意請求,任意返回數據類型,皆遵循請求三部曲post
任意請求,任意返回數據類型,皆遵循請求三部曲學習
gradle依賴gradle
implementation 'com.rxjava.rxhttp:rxhttp:1.1.5'
//註解處理器,生成RxHttp類,便可一條鏈發送請求
annotationProcessor 'com.rxjava.rxhttp:rxhttp-compiler:1.1.5'
複製代碼
注:RxHttp類是經過註解處理器自動生成的,故須要您在項目中使用一處註解,而後rebuild 一下項目,RxHttp便可以生成。註解使用,請查看RxHttp 一條鏈發送請求之註解處理器 Generated API(四)ui
到這裏相信不少人已經有疑問了spa
這些如何經過三部曲實現呢?彆着急,接下來一一爲你們講解
上面例子中,咱們調用了RxHttp.get("http://...")
語句,其中get
操做符就表明Get請求。由此,咱們能夠猜想,發送Post請求,只須要調用post
操做符便可。然而咱們只猜對了一半,爲啥這麼說呢?Post請求中,咱們常見的又分爲兩種,一種的表單形式的Post,另外一種是Json字符串形式的Post。爲此,RxHttp提供了兩個發送Post請求的操做符,分別是postForm
和postJosn
,此時,咱們就能夠這樣發送Post請求
RxHttp.postForm("http://...") //發送表單形式的Post請求
.asString() //返回String類型
.subscribe(s -> { //訂閱觀察者,
//請求成功
}, throwable -> {
//請求失敗
});
RxHttp.postJson("http://...") //發送Json字符串單形式的Post請求
.asString() //返回String類型
.subscribe(s -> { //訂閱觀察者,
//請求成功
}, throwable -> {
//請求失敗
});
複製代碼
若是想發送Delete、Put等其它方式的請求,同理,以下:
RxHttp.deleteForm("http://...")
RxHttp.deleteJson("http://...")
RxHttp.putForm("http://...")
RxHttp.putJson("http://...")
//其它請求方式同上
複製代碼
最後,咱們來看下,RxHttp都提供了哪些請求方式,以下:
其中get
、
postForm
、
postJson
上面已經講過了,其它的同理,這裏就再也不講述了。
請求方式肯定了,如何添加參數或者頭像信息呢?so easy!!!,只需調用add
、addHeader
便可,以下:
RxHttp.postForm("http://...") //發送表單形式的Post請求
.add("key","value") //添加請求參數,該方法可調用屢次
.addHeader("headerKey","headerValue") //添加請求頭參數,該方法可調用屢次
.asString() //返回String類型
.subscribe(s -> { //訂閱觀察者,
//請求成功
}, throwable -> {
//請求失敗
});
複製代碼
上面的asString
操做符表明返回String字符串類型,RxHttp提供了20
個asXXX
操做符,以下:
asObject
、
asList
、
asDownload
這3個操做符。
顯示開發中,咱們返回的更可能是自定義的數據類型,好比咱們想獲得一個Student對象,此時,咱們就能夠用asObject
操做符,以下:
RxHttp.get("http://...") //發送Get請求
.asObject(Student.class) //指定返回User類型數據
.subscribe(student -> { //訂閱觀察者,
//請求成功,這裏student就是Student對象
}, throwable -> {
//請求失敗
});
複製代碼
然而,若是咱們想獲得一系列Student對象呢?使用asObject顯然行不通,此時就要用到asList
操做符了,以下:
RxHttp.get("http://...") //發送Get請求
.asList(Student.class) //指定返回User類型數據
.subscribe(students -> { //訂閱觀察者,
//請求成功,這裏students就是List<Student>對象
}, throwable -> {
//請求失敗
});
複製代碼
注:asXXX操做符,內部會默認指定請求在
Schedulers.io()
線程執行
當咱們須要下載文件,就用此操做符,以下:
RxHttp.get("http://...") //Get請求
.asDownload(".../rxhttp.apk") //使用asDownload操做符,並傳入存儲路徑
.subscribe(s -> {
//下載成功回調,s爲文件存儲路徑
}, throwable -> {
//下載失敗回調
});
複製代碼
更多文件操做,請查看Android 史上最優雅的實現文件上傳、下載及進度的監聽
在上一步中,細心的你也許發現了,使用了asXXX
操做符後,會返回一個Observable
對象,那這個又是什麼對象呢?其實它就是RxJava內部的Observable
對象。
在這,能夠告訴你,當咱們調用asXXX
操做符,拿到Observable
對象後,RxHttp就已經完成了它的使命,接下來的事情都丟給了RxJava。拿到Observable
對象,結合RxJava強大的操做符,咱們能夠作很是多的事情,好比咱們想要在主線程回調觀察者,以下:
RxHttp.get("http://...") //發送Get請求
.asList(Student.class) //指定返回User類型數據
.observeOn(AndroidSchedulers.mainThread()) //主線程回調觀察者
.subscribe(students -> { //訂閱觀察者,
//請求成功,這裏students就是List<Student>對象
}, throwable -> {
//請求失敗
});
複製代碼
注:請求默認在Schedulers.io()線程執行,如未指定觀察者所在線程,則默認在請求所在線程回調
好了,請求三部曲就講解結束,到這,你已經掌握了RxHttp 70% 的功能,而且掌握了RxHttp的精髓----請求三部曲,在任意請求中,就能作到以不變應萬變。 本篇文章的目的在於提供一個簡單的入門教程,更多功能請查看
RxHttp 一條鏈發送請求之註解處理器 Generated API(四)
最後,藉此機會,簡單解答一下讀者反饋的問題
答:支持,RxHttp內置默認的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();
複製代碼
答:支持,可是RxHttp默認沒有作任何緩存處理,若有須要,請自定義OkHttpClient對象開啓緩存,並使用RxHttp發送請求時,使用cacheControl(CacheControl cacheControl)
設置緩存策略
答:session或者token涉及到具體的業務邏輯,故RxHttp暫時並無作深度封裝。若有須要,可自定義OkHttpClient對象經過攔截器去實現。
答:必須支持,可是依賴註解處理器時,須要使用kapt代替annotationProcessor
答:在最新的Demo中,已有案例,歡迎下載Demo體驗
答:優點以下:
在使用過程當中,如遇到什麼問題,環境加羣交流RxHttp&RxLife 交流羣:378530627