1. 程式人生 > >找到屬於自己的RxJava+Retrofit2網路請求

找到屬於自己的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

    1. 建立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