当 Retrofit 遇上 LiveData

最近在学习 Google 官方的 GithubBrowserSample
项目时,发现 Yigit Boyar
已经在项目里写好了一个 Adapter,用来连接 Retrofit
LiveData
。但是这种做法 一直没有得到 Retrofit 项目的官方认可
时间点在 2017年左右,理由如下:

  1. JakeWharton 认为把 Http 请求包装成 LiveData 包装很奇怪
  2. 当时 LiveData 刚被提出,各种 API 还不稳定
  3. Retrofit 的扩展机制给了开发者很大的空间去自定义各种集成方式,官方不适合去写死一些东西

随着 android architecture components
的日趋完善,越来越多的人开始转向使用 LiveData
,进而享受到了 MVVM
模式的优秀之处。考虑到当时的时间点是 2017 年,随着之后 JakeWharton 自己也加入了 Google ,并且 android architecture components
也早已发布正式版本,再加上 Google 官方的 Demo 里已经出现了这种写法,我觉得是时候尝试一下了。

我把官方 Demo 里的代码抽出了一个库,集成之后可以很方便地将 Retrofit
LiveData
结合使用。

项目地址

github.com/shawnlinboy…

引用

implementation 'me.linshen.retrofit2:adapter-livedata:1.0.0'
复制代码

用法

Retrofit.Builder()
            .baseUrl("https://api.github.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(LiveDataCallAdapterFactory())
            .build()
            .create(GithubService::class.java)
            .getUser("shawnlinboy").observe(this,
                Observer { response ->
                    when (response) {
                        is ApiSuccessResponse -> {
                          //success response
                        }
                        else -> {
                            //failed response
                        }
                    }
                })
复制代码

说明

目前使用 Retrofit
LiveData
结合最大的“问题”就在于, LiveData
本身是对数据类的包装,或者一个 Observable
,没有 Callback
的概念,因此需要一个 ApiResponse
来承载一下,好把 Body
放进去,因此在用起来最外层始终会是 ApiResponse

其实坦白讲,在挪完这个库、写完 Demo 之后,我觉得这种方法比与 RxJava
的结合真的简单太多了。尽管我依旧不否定 RxJava
是一个非常优秀的库,并且我现在手上的项目里也还有很多地方需要依赖 RxJava
来帮我调度,但我始终觉得 RxJava
对新手是在是太不友好了,主要是上手成本太高:一来你的编程思维需要向 响应式
方向转变一下,二来 RxJava
超多的运算符也确实让我团队里的很多小伙伴喝了一壶,经常用错,有些甚至是上线后才发现原来用的这个运算符有问题,应该换另外一个。

我会在接下来的一些项目里尽可能采用 Retrofit
LiveData
结合的方式,看会不会有一些卡壳的场景。如果大家有更好的写法或者想法,也欢迎提出,欢迎 PR。

原文 

https://juejin.im/post/5d6626f16fb9a06af13d7abe

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 当 Retrofit 遇上 LiveData

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址