关于 kotlin 安卓开发,网络框架有用 Retrofit+协程的方式实现的吗,真的好用吗

2021-05-07 15:25:26 +08:00
 lw10645

刚刚在看相关文章,自己也动手实现了下,发现并不怎么好用啊,还是说我没 get 到

viewmodel 里面请求接口,结果封装成 sucessLiveData 、errorLiveData 、loadingLiveData,ui 界面监听 livedata 更新 ui

1.某些接口如果请求失败会把错误数据以 httpexception 的方式返回到客户端,这种方式好像没办法同时兼容统一处理业务的错误数据和 exception 的错误数据

2.很多页面都是多个请求,单一的 sucessLiveData 、errorLiveData 处理好像并不太优雅

2 可以通过不同的接口建不同的 livadata 来解决,主要是 1,应该怎么处理呢

9238 次点击
所在节点    Android
7 条回复
MarsYan
2021-05-07 16:08:41 +08:00
项目中可以使用协程+Okhttp 自己封装一下,参考 RxHttp
xloger
2021-05-07 16:13:15 +08:00
同蹲一个方案。
我对这块没仔细研究过,当时参考 https://juejin.cn/post/6844904148521992205 封装了一下。不知道还有没有更好的方案。
kyleLin
2021-05-07 16:55:26 +08:00
反正单一的 success error livedata 这种方式我个人觉得不应该出现,一个接口一个操作对应一个 Livedata 比较好。
官方也是用密封类去声明 Success,Loading,Fail 等状态,然后通过 livedata 发射出去。
至于在哪里做状态的发射,我个人是在网络层用 Flow 去做请求,然后 emit 对应的状态,顺带把捕获到的错误做一个统一过滤处理和包装再 emit 出去,然后 ViewModel 可以通过 asLiveData 把请求 Flow 转成 Livedata
unco020511
2021-05-07 17:12:35 +08:00
官方推荐是封装一个包装类,里面包含正常 /异常数据,具体做法是使用密封类,可以去 google 的 github 看一下例子
cgpiao
2021-05-07 17:14:22 +08:00
fuel 吧,轻便
ikas
2021-05-07 23:55:28 +08:00
本来就是不好用,还有一些坑
hlayk
2021-05-08 09:35:59 +08:00
我就一直用着呢。你可以通过这个官方推荐的 [Resource]( https://developer.android.com/jetpack/guide#addendum) 类去封装请求的返回数据,出现 exception 的时候返回 Resource.Error 就可以了。当然 Resource 类都用 livedata 再封装一次,这样就可以解决你第一个问题了。对于第二个问题就是不同的请求 用不同的 livedata 去接受

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/775441

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX