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工厂也意味着我们也可以根据一些奇葩的需求去

定义一些特殊的工厂,只是场景可能偏少,最好还是不要搞骚操作了,规范正规点

posted on 2021-01-06 17:23  翻滚的咸鱼  阅读(1272)  评论(0编辑  收藏  举报