Rxjava 2.0封装项目实例

本文介绍了在Android项目中使用RxJava 2.0进行封装的原因和方法,以简化订阅过程中的线程切换和复写操作。通过分享项目中的封装代码,详细解释了封装思路,并提供了源码链接,便于读者理解和学习。主要封装集中在RxUtil、RxLife和RootBean等类,目前能满足实际需求并持续迭代优化。
摘要由CSDN通过智能技术生成
简述
  • 现在的Android客户端项目中运用RxJava+Retrofit2基本上已经是主流了。

  • RxJava的优点就不赘述了,对于RxJava还不熟悉的可以在CSDN多找找相关的文章,都写得很好。

  • 如果不对RxJava的Observer二次封装的话,每次新建订阅都要加线程切换,复写方法,比较繁琐。所以我们就有一个二次封装的需求。我将项目中我设计的封装分享出来,至于为什么要这么封装,我在源码里面加注释,相信大家应该能看懂。

代码结构

源码点击这里

  • 主要封装就在RxUtil中,方法都一并注释了。也可参考源码地址。
  • 目前使用过程中还没有出现不能满足要求的情况,后续都会一直迭代此封装。

代码文件主要有
RxUtil

package custom.sunday.com.sharedemo.component.rx;

import android.support.annotation.StringRes;
import android.text.TextUtils;
import android.util.Log;

import java.util.List;

import custom.sunday.com.sharedemo.HomeApplication;
import custom.sunday.com.sharedemo.R;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.ObservableTransformer;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;


/**
 * Created by Administrator on 2017/8/14.
 */

public class RxUtil {
   

    /**
    * 线程切换,用一个方法代替,免去手抖打错线程
    * */
    public static <T> ObservableTransformer<T, T> applySchedulers() {
        return new ObservableTransformer<T, T>() {
            @Override
            public Observable<T> apply(Observable<T> observable) {
                return observable.subscribeOn(Schedulers.io()).
                        observeOn(AndroidSchedulers.mainThread());
            }
        };
    }


    /**
     * RxJava2.0中不允许发送空指针,所以需要在这里判断如果为空,则发送empty
     * 后台格式固定为RootBean
     * private String error; //错误码
     * private String logID; //调试ID
     * private String desc;  //详细描述
     * private T result;     //我们关心的数据
     * 我们只对数据感兴趣,所以使用此方法转换Observable只拿result
     * */
    public static <T> ObservableTransformer<RootBean<T>, T> handleResult() {
        return new ObservableTransformer<RootBean<T>, T>() {
            @Override
            public Observable<T> apply(Observable<RootBean<T>> rootBeanObservable) {
                return rootBeanObservable.flatMap(new Function<RootBean<T>, Observable<T>>() {
                    @Override
                    public Observable<T> apply(RootBean<T> rootBean) {
                        if (rootBean.getError().equals(HttpCode.SUCCESS)) {
                            if (rootBean.getResult() == null) {
                                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值