RxJava整合Retrofit遇到的問題總結

一:初上手(填坑)

  Observable將事件序列執行完畢後,會回調Observe的onNext()方法和onCompleted()方法,當出現異常/錯誤時會調用onError()方法。java

由此,咱們推斷,問題出現的地方應該是在Observable的執行過程。json

  先闡述一下筆者的需求,使用retrofit和rxjava進行簡單的網絡請求(請求獲得的數據自動裝配爲實體類),後端給的返回格式是標準的Result格式(即status,message,data),前二者相對固定,而data域多是User對象,Paper對象,也多是Map/List,而咱們想要獲得的就是這個data中的數據,那麼咱們勢必須要進行數據的剝離。剛好,RxJava的map(變換)能夠實現此需求。後端

  下面,上圖:網絡

  1.Paper實體類學習

  2.Result結果集實體類測試

  3.定義Retrofit的請求接口ui

  4.建立Retrofit實例spa

  5.因爲請求接口定義的返回類型爲Observable<...>類型,因此可直接在其上進行rx的鏈式操做日誌

  6.圖中的map()方法中的參數是一個自定義的接口,用於 事件變換code

  7. 圖5中的onNext方法中使用自定義接口(以下圖),進行數據轉發

  8.測試

  9. 一萬個草尼瑪,什麼鬼。再往下看日誌,發現

  

 

臥槽,尼瑪. 無效的時間指示器(原諒我蹩腳的英文)。且上圖的數字,即是json中的日期

  10. 由此,筆者便猜想是Gson裝配過程當中出現的問題,而後經過一番學習,發現Gson默認解析時間時會出現問題,緣由未知,有知道的同窗能夠在評論區留言,互相學習了啦。

  解決方案:

     GsonBuilder builder = new GsonBuilder();

        // Register an adapter to manage the date types as long values
        builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
            public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
                return new Date(json.getAsJsonPrimitive().getAsLong());
            }
        });

        Gson gson = builder.create();

  而後在下圖位置傳入gson實例

  11. 再次測試

 天地良心,終於能夠了。下一節,會寫一些關於對RxJava和Retrofit的封裝。

相關文章
相關標籤/搜索