rxjava2 结合retrofit2进行业务封装

本文介绍如何使用RxJava2与Retrofit2进行网络请求封装,包括依赖添加、接口定义、Retrofit实例创建及请求处理。通过示例展示了如何定义请求接口和服务,并实现数据预处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rxjava2 结合retrofit2进行业务封装

第一步 添加依赖:

    compile 'io.reactivex.rxjava2:rxjava:2.0.0'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.0'
    compile 'com.squareup.retrofit2:converter-jackson:2.0.0'
    compile 'com.squareup.retrofit2:retrofit:2.2.0' 

第二步 定义一个接口类 例如:

public interface UserService {
@FormUrlEncoded
@POST("user/getchecknum")
Observable<BaseEntity<ChecknumBean>> getCheckNumber(@Field("phoneNum") String phoneNum);
}

@FormUrlEncoded为URL编码 retrofit2.x必须要
@POST(“user/getchecknum”) 定义一个POST请求 user/getchecknum 为URL的一部分
getCheckNumber为一个普通的方法后来会调用 返回一个Observable,Observable的泛型为返回的数据用BaseEntity来接收
来看下BaseEntity:

public class BaseEntity<T> implements Serializable {
    private int returnCode;
    private String returnMsg;
    private T data;
      public int getReturnCode() {
        return returnCode;
    }

    public void setReturnCode(int returnCode) {
        this.returnCode = returnCode;
    }

    public String getReturnMsg() {
        return returnMsg;
    }

    public void setReturnMsg(String returnMsg) {
        this.returnMsg = returnMsg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

再来看ChecknumBean:

        public class ChecknumBean {
            private String checkNum;

            public String getCheckNum() {
                return checkNum;
            }

            public void setCheckNum(String checkNum) {
                this.checkNum = checkNum;
            }
        }

第三步 创建Retrofit

我是这么创建的 你可以根据业务来创建:

public class RetroFactory {

    private RetroFactory() {
    }

    private static String baseUrl = "http://58.213.75.45/gaojie/";

    private static OkHttpClient httpClient = new OkHttpClient.Builder()
            .connectTimeout(30, TimeUnit.SECONDS)
            .readTimeout(30, TimeUnit.SECONDS)
            .build();

    private static UserService userService = new Retrofit.Builder()
            .baseUrl(baseUrl)
            .addConverterFactory(JacksonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .client(httpClient)
            .build()
            .create(UserService.class);
    public static UserService getUserService() {
        return userService;
    }
}

发送请求

RetroFactory.getUserService().getCheckNumber("13888888888")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<BaseEntity<ChecknumBean>>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                    }

                    @Override
                    public void onNext(BaseEntity<ChecknumBean> value) {
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });

这是最简单的用法了. 用的最原始的Observer 返回的数据有成功 有失败 情况很多 我们可以创建个BaseObserver 来进行数据的预处理:

public abstract class MyObserver<T> implements Observer<BaseEntity<T>> {
    @Override
    public void onSubscribe(Disposable d) {
    }


    @Override
    public void onNext(BaseEntity<T> value) {
        if (value.getReturnCode() == 0) {
            onHandleSuccess(value.getData());
        } else {
            onHandleError(value.getReturnCode(),value.getReturnMsg());
        }
    }
    protected abstract void onHandleSuccess(T data);

    protected abstract void onHandleError(int returnCode, String returnMsg);
    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onComplete() {

    }
}

在这个预处理中我只是根据我自己的实际情况来做的 我们后来返回的returnCode==0的时候才算真正的成功 其他returnCode为其他情况 所以我就抽出两个方法让子类实现
在onError(Throwable e)中可以对异常进行统一的处理 就不用交个子类处理了
再次请求就是这么写了:

RetroFactory.getUserService().getCheckNumber("1388888888")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new MyObserver<ChecknumBean>() {
                    @Override
                    protected void onHandleSuccess(ChecknumBean data) {

                    }

                    @Override
                    protected void onHandleError(int returnCode, String returnMsg) {

                    }
                });
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值