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工廠也意味着我們也可以根據一些奇葩的需求去
定義一些特殊的工廠,只是場景可能偏少,最好還是不要搞騷操作了,規范正規點