刚刚在看相关文章,自己也动手实现了下,发现并不怎么好用啊,还是说我没 get 到
viewmodel 里面请求接口,结果封装成 sucessLiveData 、errorLiveData 、loadingLiveData,ui 界面监听 livedata 更新 ui
1.某些接口如果请求失败会把错误数据以 httpexception 的方式返回到客户端,这种方式好像没办法同时兼容统一处理业务的错误数据和 exception 的错误数据
2.很多页面都是多个请求,单一的 sucessLiveData 、errorLiveData 处理好像并不太优雅
2 可以通过不同的接口建不同的 livadata 来解决,主要是 1,应该怎么处理呢
1
MarsYan 2021-05-07 16:08:41 +08:00
项目中可以使用协程+Okhttp 自己封装一下,参考 RxHttp
|
2
xloger 2021-05-07 16:13:15 +08:00
同蹲一个方案。
我对这块没仔细研究过,当时参考 https://juejin.cn/post/6844904148521992205 封装了一下。不知道还有没有更好的方案。 |
3
kyleLin 2021-05-07 16:55:26 +08:00
反正单一的 success error livedata 这种方式我个人觉得不应该出现,一个接口一个操作对应一个 Livedata 比较好。
官方也是用密封类去声明 Success,Loading,Fail 等状态,然后通过 livedata 发射出去。 至于在哪里做状态的发射,我个人是在网络层用 Flow 去做请求,然后 emit 对应的状态,顺带把捕获到的错误做一个统一过滤处理和包装再 emit 出去,然后 ViewModel 可以通过 asLiveData 把请求 Flow 转成 Livedata |
4
unco020511 2021-05-07 17:12:35 +08:00
官方推荐是封装一个包装类,里面包含正常 /异常数据,具体做法是使用密封类,可以去 google 的 github 看一下例子
|
5
cgpiao 2021-05-07 17:14:22 +08:00 via Android
fuel 吧,轻便
|
6
ikas 2021-05-07 23:55:28 +08:00
本来就是不好用,还有一些坑
|
7
hlayk 2021-05-08 09:35:59 +08:00
我就一直用着呢。你可以通过这个官方推荐的 [Resource]( https://developer.android.com/jetpack/guide#addendum) 类去封装请求的返回数据,出现 exception 的时候返回 Resource.Error 就可以了。当然 Resource 类都用 livedata 再封装一次,这样就可以解决你第一个问题了。对于第二个问题就是不同的请求 用不同的 livedata 去接受
|