Retrofit LiveDataCallAdapterFactory


retrofit可以訪問網絡后自動解析成對象,很絲滑,應該都已經體驗過了,而要使用這個功能也很簡單,addConverterFactory(GsonConverterFactory.create()) ,添加了一個gson解析工廠,又或者搭配rxjava的 RxJava2CallAdapterFactory 解析工廠,

可以在接口成功時解析成 Observable 對象返回,很絲滑,而現如今流行mvvm模式,使用 livedata 操作數據的越來越多,的確也很便捷,rxjava已經開始虛了,在這種情況下,livedata也能跟rxjava一樣,直接通過添加一個解析工廠然后返回一個livedata對象的

數據結果給我們

那么問題來了,工廠在哪里呢,貌似沒有現成的,自己搗鼓一個吧

等等,其實有現成的,livedata的demo中其實有例子在,其中就有自定義工廠這一塊,我也是后來才發現的,一開始看資料自己定義摸索,等寫好了才發現,在gayhub的android上有個demo里有,這是鏈接

architecture-components-samples

工廠代碼也不多,很好理解

 

此處返回時檢查數據類型,看有沒有正確的解析成 livedata 對象,如果有的話進入工廠,工廠里面直接返回結果對象

 

主要解析邏輯其實就是解析對象 ApiResponse ,里面可以自己定義一些規則,這個類之前因為參考時我直接復制的demo上的,把前面自己寫的替換了,感覺這種定義更靈活一點

 

里面具體的調用就在前面的工廠里實現了,成功回調返回success,不同的狀態可以定義不同的模型,因為是直接返回的livedata類型,所以你在調用接口的時候就可以直接監聽數據變化了,等數據成功時直接接收

 

最大的區別就是以前的模式下,返回了數據后是在回調里的,你需要自己定義一個livedata,等數據返回后在post出來,現在有了工廠,直接返回livedata,observe(this, vo -> {}),省略了一個流程

所以看需求,如果是kotlin啟用協程使用的話就不是很符合了,因為協程不是同步操作,當接口被掛起時,異步返回結果,這種方式就不好直接調用接口時去observe了,一開始我在尋找共存點,但是沒找到,除了livedata工廠也意味着我們也可以根據一些奇葩的需求去

定義一些特殊的工廠,只是場景可能偏少,最好還是不要搞騷操作了,規范正規點


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM