Retrofit2+RXJava2+Gson+Kotlin

作者: 带带太师兄 | 来源:发表于2018-08-21 12:58 被阅读188次

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

     github地址:https://github.com/honglvt/NetWorkUtil

    相关文章

      网友评论

        本文标题:Retrofit2+RXJava2+Gson+Kotlin

        本文链接:https://www.haomeiwen.com/subject/yvwdiftx.html