历时2天,完成了用kotlin写网络框架
1.错误统一处理
2.和服务端约定response格式,剥离出data,
3.MVVM
4.DTO-VO转换
5.Activity层几乎没有代码,极度简洁
先上效果图
1)首先新建一个VM类,用于网络请求
2)利用map操作符将DTO转为业务所需的VO
3)然后通过callback的方式将data暴露给activity,具体业务场景不同,有时候可能需要Observer的complete
4)最后调用VM的方法可以看到View层只有几行代码,极大程度降低了业务与逻辑的冗余度,
如果用上databinding Activity只需要请求网络就可以了 是不是很方便?
一、Retrofit的封装
kotloin对于coder来说,简化了大量代码,双重检查单例只需要一行代码
val instance: ApiClientby lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED){
ApiClient()
}
这样就保证了全局只有一个retrofit对象
接口层没什么变化,不过是kotlin的语法不一样
这样就完成了retrofit的封装
二、服务端返回的数据处理
1)首先定义一个基础类型,这里是服务端返回的格式,分别为code,msg,和data,在后期我们要将data单独剥离出来给具体的业务使用,code和msg与业务无关
2)错误处理,错误分为服务端错误和本地错误
1.本读错误:在onErrorResumeNext()的时候返回自定义的exception,通过Observable.error()发射出去
具体的CustomException如图所示,判断throwable类型,自定义的exception
3)数据剥离,用到了flatMap,此处解析服务端有关的错误,如果code等于200,则代表接口请求成功,否则通过Observable.error()抛出
4)线程调度,在子线程请求,在主线程处理
upstream
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
通过4个操作符之后我们完成了以上任务,最后通过compose操作将这个操作集合合并为一个简化代码
网友评论