找到屬於自己的RxJava+Retrofit2網路請求
現在網路上面鋪天蓋地都是RxJava+Retrofit2的部落格,還有好多大神不斷地造輪子。然後在前段時間,由於專案的空檔期,我就對自己現在負責的專案嘗試了一下這RxJava+Retrofit2的寫法,對於我來說,首先是大量地看各位大神的部落格,從中不斷吸取精華,在結合自己公司的後臺完成的一套屬於自己專案的一套網路請求。下面我只針對我的專案情況來描述我的理解。
1.Retrofit介紹
2.Gradle配置
3.簡單使用Retrofit2+RxJava
4.自定義JSON解析、錯誤請求處理、攔截器、降低程式碼冗餘。
- Retrofit介紹
Retrofit是SQUARE美國一家移動支付公司最近新發布的在Android平臺上http訪問的開源專案,Retrofit與okhttp共同出自於Square公司,我們在HttpClient被棄用後,在HttpURLConnection使用的期間,大家想必會發現okHttp的網路請求開源專案,然後在網路拼命搜okHttp的二次封裝,然而retrofit對okhttp做了一層封裝,把網路請求都交給給了Okhttp,我們只需要通過簡單的配置就能使用retrofit來進行網路請求了。
- Gradle配置
首先我們在Gradle檔案中進行配置
然而對於RxJava和Retrofit的版本差異我就不詳細描述,有興趣的同學可以逐一去學習。
簡單使用Retrofit2+RxJava
- 建立Retrofit2請求工具類
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("url")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory (RxJavaCallAdapterFactory.create())
.build();
2. 定義請求API
@FormUrlEncoded
@POST(URLs.Login)
Observable<LoginBean> login(@FieldMap() Map<String, String> maps);
3. 簡單使用
RetrofitManage.getInstance().getHttpServiceConnection().login(maps)
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<LoginBean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(LoginBean loginBean) {
}
});
上面的是最簡單的Retrofit2+RxJava的用法,對於還處於認知階段的同學可以參考一下,但是對於已經有一定了解的同學,上面說的可能一點用處都沒有,下面我們才是本篇的重點。在Retrofit2+RxJava使用過程中,我們結合專案,其實會遇到很多不同的問題,我們應該如何再次優化、再次封裝。
如何適應不同的專案不同業務
- 程式碼過多重複
重複的RxJava處理,我們可以封裝一個方法統一使用RxJava來處理。
另外大家都可以看到我們每一次的請求,你需要多次重複的寫回調處理,我們需要再次優化。
最終效果
我們不用每一次的請求去寫大量重複的程式碼,這樣給人一種較為整潔的感覺。
- 我的後臺返回資料各種奇葩、原始資料巢狀多層、某情況需前端特殊處理返回資料等等(過多不吐槽),我們不能順利使用GsonConverterFactory來轉化我們需要的JavaBean,於是我們定義一個適用的JsonConverterFactory。
RetrofitManage為:
JsonConverterFactory為:
JsonResponseBodyConverter為:
這樣我們可以將我們請求到的資料流轉成JSONObject物件,然後再根據自己需要解析資料組裝JavaBean。
- 如何處理錯誤請求和異常資料
在上面的JSON擷取處理中,大家可以看到我對非正常返回(小於0)的情況會丟擲一個ResultException的自定義異常,然後轉到Subscriber的onError中處理,還有我們在請求資料,會遇到各種錯誤的網路請求結果,我們可以在封裝的ProgressSubscriber類中統一來處理。
ResultException類為:
ProgressSubscriber中onError()統一處理錯誤結果
- 攔截器
對於我們的請求,okHttp還有很多的特點,例如請求攔截器header,動態注入cookie,加入https請求信任等等處理。這裡我來簡單說一下攔截器。
我們是在初始化RetrofitManage處理OkHttpClient:
總結:
上述就是我在使用RxJava+Retrofit2的時候遇到的問題,我根據自身需要來封裝網路請求,大家在網上各種各樣的部落格中都會找到適合自己的一種方式,但是我們沒有必要如何完美封裝如何完美使用這那框架的,第三方的庫會幫我們封裝底層的一些程式碼,避免我們做重複多餘易出錯的事情,讓我們專注於業務邏輯,所以學習任何一個第三方庫都將是簡單的,不應該複雜不該複雜的地方。
原始碼將會在下篇的RxJava+Retrofit2+MVP部落格一起上傳。謝謝大家。
相關推薦
找到屬於自己的RxJava+Retrofit2網路請求
現在網路上面鋪天蓋地都是RxJava+Retrofit2的部落格,還有好多大神不斷地造輪子。然後在前段時間,由於專案的空檔期,我就對自己現在負責的專案嘗試了一下這RxJava+Retrofit2的寫法,對於我來說,首先是大量地看各位大神的部落格,從中不斷吸取精華
RxJava Retrofit2 網路請求,返回資料格式統一的資料報文處理方法
統一的報文格式 一般公司開發都是會設計請求報文,報文結構一般是統一的,例如下面這樣的格式 { "code": "error", "msg": "錯誤資訊", "data": "返回資料資訊" } data 有可能是JsonArray 也有可能是Jso
Retrofit+Rxjava+MVP網路請求框架
導言: 之前有套基於MVP的網路請求框架,是okhttp封裝的,後來由於retrofit,rxJava的流行,所以更改一部分來使用 釋義: retrofit:基於okhttp再次封裝的網路請求框架 rxjava:非同步工具庫,handler+thread->asyctask-&
Android_Retrofit+RxJava+MVP+網路請求多次判斷
//依賴 compile 'io.reactivex.rxjava2:rxjava:2.1.1' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'com.squareup.retrofit2:retr
RxJava2+Retrofit2網路請求框架封裝及使用
最近把RxJava2和Retrofit2學習了一下,並做了一個簡單的封裝,算是對學習的總結,以及以後的做專案時可以,可以拿來及用。 注意:本篇不說RxJava2 和 Retrofit2的基礎使用,只梳理一下封裝的步驟,所以適合對RxJava2 和 Retrofit2有一定的
智慧廚房重構-Retrofit和RxJava進行網路請求
上一篇部落格智慧廚房重構-MVP架構中我們簡單談了一下MVP的使用方法,使用MVP介面的方式讓我們的程式碼已經很簡單明瞭了,但是我告訴你還不夠,使用了本篇的Retrofit和RxJava後讓你的程式碼美如畫。對,就是美如畫。 1.Retrofit的簡單介紹
Retrofit+RxJava+MVP+網路請求多次判斷
//依賴 compile 'io.reactivex.rxjava2:rxjava:2.1.1' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'com.squareup.retrofit2:
Retrofit+RxJava處理網路請求
Retrofit的基本用法在上一節已經介紹過了接下來我們介紹下Retrofit+RxJava的組合使用不了解Retrofit的用法的可以先看看我上篇部落格的介紹 Restrofit簡單入門 那如果不瞭解RxJava的我會在後續的課程中對RxJava進行介紹
iOS 自己封裝的網路請求,json解析的類
基本上所有的APP都會涉及網路這塊,不管是用AFNetWorking還是自己寫的http請求,整個網路框架的搭建很重要。 樓主封裝的網路請求類,包括自己寫的http請求和AFNetWorking的請求,程式碼簡單,主要是框架搭建。簡單來說,就是一個請求類,一個
Retrofit和RxJava的網路請求封裝
public class RetrofitUtil { private static RetrofitUtil retrofitUtil;//工具類物件 private static RetrofitService retrofitService;//請求網路介面 public static OkHt
打造屬於自己的網路請求框架(OKHttp+Retrofit+RxJava)
開發者們現在都在使用OkHttp了,在很多借鑑之後,現在也來封裝屬於自己的網路請求框架。 該框架使用Retrofit,OkHttp,RxJava,RxAndroid,Gson一起封裝。 客戶端請求一般分為如下幾步: 通過API向伺服器傳送請求------->伺服器收到
RxJava+Retrofit2+MVP實現網路請求
上一遍部落格介紹了RxJava+Retrofit2的使用。在前段時間,刷招聘簡歷的時候,發現有一部分的公司會要求MVP模式的理解和具體使用。在現在越來越複雜的業務,我們的Activity的負擔也是越來越大,因此接著這篇我結合MVP模式來介紹一下自己對RxJava
Android RxJava 實戰系列:優雅實現 網路請求巢狀回撥
轉自-----http://blog.csdn.net/carson_ho/article/details/78315696,請為大神打call 前言 Rxjava,由於其基於事件流的鏈式呼叫、邏輯簡潔 & 使用簡單的特點,深受各大 Android
Android RxJava 實戰講解:優雅實現 網路請求輪詢
轉自-----http://blog.csdn.net/carson_ho/article/details/78256466 前言 Rxjava,由於其基於事件流的鏈式呼叫、邏輯簡潔 & 使用簡單的特點,深受各大 Android開發者的歡迎。
Android RxJava操作符的學習---功能性操作符--網路請求出錯重連(結合Retrofit)
1. 需求場景 2. 功能說明 功能需求說明 功能邏輯 例項說明 在本例子中:採用Get方法對 金山詞霸API 傳送網路請求 通過 斷開網路連線 模擬 網路異常錯誤(恢復網路即可
Android RxJava操作符的學習---功能性操作符--(有條件)網路請求輪詢(結合Retrofit)
1. 需求場景 2. 功能說明 採用Get方法對 金山詞霸API 按規定時間重複傳送網路請求,從而模擬 輪詢 需求實現 停止輪詢的條件 = 當輪詢到第4次時 採用 Gson 進行資料解析 3.
Android RxJava操作符的學習---變換操作符---網路請求巢狀回撥
變換操作符的主要開發需求場景 = 巢狀回撥(Callback hell) 下面,我將採用一個實際應用場景例項來講解巢狀回撥(Callback hell) 1. 需求場景 1.1 背景 需要進行巢狀網路請求:即在第1個網路請求成功後,繼續再進行一次網路請求 如
Android RxJava操作符的學習---建立操作符--(無條件)網路請求輪詢
1. 需求場景 2. 功能說明 本文將採用Get方法對 金山詞霸API 按規定時間 重複傳送網路請求,從而模擬 輪詢 需求實現 採用 Gson 進行資料解析 3. 具體實現 下面結合 Ret
安卓專案實戰之強大的網路請求框架okGo使用詳解(五):擴充套件專案okRx,完美結合RxJava
前言 在第一篇講解okGo框架新增依賴支援時,還記得我們額外新增的兩個依賴嗎,一個okRx和一個okServer,這兩個均是基於okGo框架的擴充套件專案,其中okRx可以使請求結合RxJava一起使用,而okServer則提供了強大的下載上傳功能,如斷點支援,多工管理等,本篇我們主要講
監控自己APP的http/https網路請求的地址和請求耗時
關於監控http/https網路請求的思路, 目前想到兩種實現思路: 第一種實現思路是hook http請求的根介面, 目前大致是分為HttpURLConnection和Apache-Http-Client這兩種, 當然也有可能使用square/okhttp或者koush/Android