简化RxJava+Retrofit2的封装

作者: 请输入妮称 | 来源:发表于2018-07-24 20:15 被阅读59次

项目体验地址 https://github.com/HowardChenhaoyang/RetrofitPluginDemo

android-studio-plugin

该插件为了简化RxJava+Retrofit2的封装过程。

封装过程是一个持续优化的过程。如下:

使用RxJava+Retrofit2的开发过程中,需要对请求进行封装。
一般的封装流程:(kotlin代码)

    interface MemberService {
      @GET("xxxxxxx")
      fun memberList(): Observable<List<MemberBean>>
    }
    class MemberServiceImpl{
      fun memberList(): Observable<List<MemberBean>> {
        return retrofit.create(MemberService::class.java)
                       .memberList()
      }
    }

优化1: 访问网络都是需要在非UI线程进行,数据请求成功之后,在切换回UI线程进行处理,所以继续如下的封装,增加线程切换功能

    class MemberServiceImpl{
      fun memberList(): Observable<List<MemberBean>> {
        return retrofit.create(MemberService::class.java)
                       .memberList()
                       .subscribeOn(Schedulers.io())
                       .unsubscribeOn(Schedulers.io())
                       .observeOn(AndroidSchedulers.mainThread())
      }
    }

优化2: 多个请求的封装都会调用到线程切换的代码,因此可以抽离出来。

    class MemberServiceImpl{
      fun memberList(): Observable<List<MemberBean>> {
        return threadSwitch(retrofit.create(MemberService::class.java)
                       .memberList())
      }
      fun <T> threadSwitch(observable: Observable<T>): Observable<T>{
        return observable.subscribeOn(Schedulers.io())
                  .unsubscribeOn(Schedulers.io())
                  .observeOn(AndroidSchedulers.mainThread())
      }
    }

优化3: 优化2的封装中断了rxjava的链式调用,失去了代码的优雅性,因此借助Transformer操作符继续优化

    class MemberServiceImpl{
      fun memberList(): Observable<List<MemberBean>> {
        return retrofit.create(MemberService::class.java)
                       .memberList()
                       .compose(threadSwitch())
      }
      fun <T> threadSwitch(): Observable.Transformer<T, T>{
        return Observable.Transformer { observable ->
          observable.subscribeOn(Schedulers.io())
                    .unsubscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
        }
      }
    }

至此,该请求封装基本完成,当然也可以借助kotlin的扩展属性进一步优化。每次新增加接口都要重复如下步骤:
1.定义service文件: MemberService
2.定义请求方法:memberList
3.实现接口

其中1,2两步无法避免,优化的只有第3步,因此可以借助Intelli IDEA的插件化技术,彻底解放双手,自动生成第三步的代码。

该项目比较有参考意义,可以根据自己的需求进行定制。
体验demo前先安装插件(根目录下的RetrofitPlugin.jar)
插件项目地址:https://github.com/HowardChenhaoyang/android-studio-plugin

operation.gif

相关文章

  • 简化RxJava+Retrofit2的封装

    项目体验地址 https://github.com/HowardChenhaoyang/RetrofitPlugi...

  • Day14--Http&Request

    HTTP: Request: BeanUtils工具类,简化数据封装

  • 简介

    什么是mybatis mybatis是对jdbc技术的封装,简化数据库操作代码。 封装以下功能:--封装了建立连接...

  • un-app基本语法

    1.子组件v-model数据封装 简化封装方式 自动添加单位方法 封装全局方法中 使用 封装后直接写值

  • iOS 外观模式

    外观模式封装,隐藏实现细节。简化了操作,简化流程,解耦,简化操作逻辑。 应用,适用场景复杂的子系统,改进使用操作类...

  • Android 开发细节

    简化findViewById的写法 在baseActivity中封装方法protected

  • 第十四章、面向对象设计与编程

    面向对象的基本元素:封装、继承、多态。 1、封装:封装的目的是隐藏事物内部的实现细节,以便提高安全性和简化编程。封...

  • 爬虫——进阶(一)requests

    一:requests概述 requests第三方封装的模块,通过简化请求和响应数据的处理,简化繁琐的开发步骤和处理...

  • JdbcTemplate

    JdbcTemplate Spring为传统的jdbc API进行封装,简化持久层操作,虽然jdbcTemplat...

  • 设计模型-行为结构型-外观模型

    设计模型-行为结构型-外观模型 本质:封装交互,简化调用。 描述:外观模型封装了子系统多个模块内的交互过程,为客户...

网友评论

    本文标题:简化RxJava+Retrofit2的封装

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