Retrofit2+RXJava2+Gson+Kotlin

历时2天,完成了用kotlin写网络框架
1.错误统一处理
2.和服务端约定response格式,剥离出data,
3.MVVM
4.DTO-VO转换
5.Activity层几乎没有代码,极度简洁

先上Github地址 - - 原来之前一直没有上github地址 扎心了
NetworkUtil

先上效果图

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操作将这个操作集合合并为一个简化代码


你可能感兴趣的:(Retrofit2+RXJava2+Gson+Kotlin)