RxJava + Retrofit完成網絡請求

 

一、前言

   

本文基於RxJava、Retrofit的使用,如果對RxJava或Retrofit還不瞭解的簡友能夠先了解RxJava、Retrofit的用法再來看這篇文章。

 

在這片文章以前分別單獨介紹過Rxjava以及Retrofit的使用:

html

 

二、使用   

在瞭解了RxJava和Retrofit分別的用法後,RxJava、Retrofit的搭配使用也就再也不話下了。android

 

先看看使用Retrofit完成一次網絡請求是怎樣:網絡

2.1 單獨使用Retrofitpost

 

一、先寫一個servicespa

1  interface MyService {  
2              @GET("user/login" )
3                    Call<UserInfo> login(
4                    @Query("username") String username,
5                    @Query("password") String password
6           );
7 }

 

二、獲取Call執行網絡請求線程

 

以上是Retrofit單獨使用時的作法。code

 

那Retrofit與RxJava結合是怎樣使用的?下面就來講說這篇文章的重點。htm

 

2.2 RxJava+Retrofit完成網絡請求

 

一、添加依賴。前四個分別是RxJava、RxAndroid、Retrofit以及Gson的庫,最後那個纔是新加入的,RxJava + Retrofit的使用須要用到最後那個包。

compile 'io.reactivex:rxjava:x.y.z'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'

注意:最後三個包的版本號必須同樣,這裏用的是2.0.2。


二、寫一個service包含登陸方法

 

相比以前的service,這裏login方法的返回值是Observable類型。

Observable...是否是以爲很熟悉,這貨不就是以前在RxJava使用到的被監聽者?

 

三、使用Observable完成一個網絡請求,登陸成功後保存數據到本地。

 

 

RxJava + Retrofit 形式的時候,Retrofit 把請求封裝進 Observable ,在請求結束後調用 onNext() 或在請求失敗後調用 onError()。

 

能夠看到,調用了service的login方法後獲得Observable對象,在新的線程中執行網絡請求,請求成功後切換到io線程執行保存用戶信息的動做,最後再切換到主線程執行請求失敗onError()、請求成功onNext()。

 

總體的邏輯十分清晰都在一條鏈中,就算還有別的要求還能夠往裏面添加,絲絕不影響代碼的簡潔。

(終於舉了一個有實際意義的例子)。

 

注意:retrofit的初始化加了一行代碼

addCallAdapterFactory(RxJavaCallAdapterFactory.create())

三、RxJava + Retrofit 進階   

在上面舉到登陸後保存用戶信息的例子,其實在作項目的時候,每每在登陸後獲得的並非用戶信息。通常登陸後會獲得token,而後根據token去獲取用戶的信息。他們的步驟是這樣的:

 

  • 一、登陸

  • 二、獲取用戶信息(前提:登陸成功)

能夠看得出來,這是一個嵌套的結構...嵌套啊!!!天吶,最怕嵌套的結構了。


使用RxJava + Retrofit來完成這樣的請求

(借用拋物線的例子 http://gank.io/post/560e15be2dca930e00da1083 ,

稍微作了點改動)

 

接口方法:

 

 

調用login方法:

 

 

經過一個flatMap()輕鬆完成一次嵌套的請求,並且邏輯十分清晰。so easy~~~

 

四、小結

RxJava的實用性從上面的兩個例子慢慢體現了出來,邏輯越是複雜,RxJava的優點就越明顯。RxJava的使用就暫時介紹到這裏吧,使用過程當中遇到好用的再出來跟你們分享。

相關文章
相關標籤/搜索