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的封裝。