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

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/245626.html
標籤:其他
上一篇:Choreographer全決議
