zoukankan      html  css  js  c++  java
  • 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工厂也意味着我们也可以根据一些奇葩的需求去

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

  • 相关阅读:
    索引失效
    laravel记录笔记Laravel 连接数据库、操作数据库的三种方式
    php 基于redis计数器类
    0x02 MySQL SQL基本语句
    0x01 MySQL What's DataBase
    浅析僵尸进程&孤儿进程
    python并发编程&IO模型
    关于python代码是编译执行还是解释执行
    python并发编程&协程
    基于Cpython的 GIL(Global Interpreter Lock)
  • 原文地址:https://www.cnblogs.com/LiuZhen/p/LiveDataCallAdapterFactory.html
Copyright © 2011-2022 走看看