Android Rxjava+Retrofit网络请求框架封装(二)

本文详细介绍了如何在Android中封装Rxjava+Retrofit网络请求框架,包括BaseResponse与BaseObserver的封装、RxHelper调度类的使用、Retrofit的初始化以及服务错误处理、加载弹窗等功能的完善。

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

一、前言

二、BaseResponse与BaseObserver的封装

三、RxHelper调度类封装

四、Retrofit初始化封装

五、细节完善

1、服务错误信息处理

2、添加“正在加载”弹窗

3、Retorfit请求方法汇总

4、提交参数方式汇总(可忽略)

六、总结

七、Demo地址

八、内容推荐


一、前言

由于《Rxjava+Retrofit网络请求框架封装(一)》篇幅太长、防止朋友们看的太累,产生视觉疲劳。所以把基础部分和封装部分-分开写。这篇主要是实现如何更简单的去实现网络请求,提高项目后期优化和维护效率。当然有更多的好处,自己细细体会。

作者不善言语,只做粗略描述,见谅!见谅!

二、BaseResponse与BaseObserver的封装

BaseResponse是个人自定义命名的一个类,主要用来对返回数据进行抽象。

BaseObserver是对返回数据的基础数据部分进行统一处理。

为什么要对返回数据进行抽象呢?

大部分公司后台接口返回数据都遵循一定的规范:个人粗略理解分为:基础数据与需求数据

基于上一篇的基础介绍,我们可以获取到后台请求数据如下。


    
简单理解就是基础数据部分key值不会改变 

而需求数据部分也就是Demo里面的数据会根据不同的需求而改变

BaseResponse就是对基础数据进行封装处理。

实现步骤:

1、根据基础数据定义BaseResponse

2、修改API接口返回数据类型

3、对基础数据统一处理

1、根据基础数据定义BaseResponse

public class BaseResponse<T> {
    private int res_code;
    private String err_msg;
    private T demo;
    public int getRes_code() {
        return res_code;
    }
    public void setRes_code(int res_code) {
        this.res_code = res_code;
    }
    public String getErr_msg() {
        return err_msg;
    }
    public void setErr_msg(String err_msg) {
        this.err_msg = err_msg;
    }
    public T getDemo() {
        return demo;
    }
    public void setDemo(T demo) {
        this.demo = demo;
    }
}

当然我们需求数据也需重新定义

public class Demo {
    @Override
    public String toString() {
        return "Demo{" + "id='" + id + '\'' +
                ", appid='" + appid + '\'' +
                ", name='" + name + '\'' +
                ", showtype='" + showtype + '\'' +
                '}';
    }
    private String id;
    private String appid;
    private String name;
    private String showtype;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getAppid() {
        return appid;
    }
    public void setAppid(String appid) {
        this.appid = appid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getShowtype() {
        return showtype;
    }
    public void setShowtype(String showtype) {
        this.showtype = showtype;
    }
}

2、修改API接口返回数据类型

   // @GET(Constans.retrofit)
   // Observable<Bean> getRetrofit1();
   // 把原先的Bean类分成BaseResponse基础数据与Demo需求数据两个类
    @GET(Constans.retrofit)
    Observable<BaseResponse<Demo>> getRetrofit2();

3、对基础数据统一处理

/**
 * 创建Base抽象类实现Observer
 */
public abstract class BaseObserver<T> implements Observer<BaseResponse<T>> {
    private static final String TAG = "BaseObserver";
    @Override
    public void onSubscribe(Disposable d) {
        Log.e(TAG, "onSubscribe: " );
    }
    @Override
    public void onNext(BaseResponse<T> response) {
        //在这边对 基础数据 进行统一处理  举个例子:
        if(response.getRes_code()==200){
            onSuccess(response.getDemo());
        }else{
            onFailure(null,response.getErr_msg());
        }
    }
    @Override
    public void onError(Throwable e) {
        Log.e(TAG, "Throwable: " + e.getMessage());
    }

    @Override
    public void onComplete() {
        Log.e(TAG, "onComplete: " );
    }

    public abstract void onSuccess(T demo);

    public abstract void onFailure(Throwable e,String errorMsg);
}

请求网络数据

 retrofit.create(ApiUrl.class)
                .getRetrofit2()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                //绑定生命周期
                .compose(bindUntilEvent(ActivityEvent.DESTROY))
                .subscribe(new BaseObserver<Demo>(){
                    @Override
                    public void onSuccess(Demo demo) {
                        Log.e(TAG, "onSuccess: "+demo);
                    }
                    @Override
                    public void onFailure(Throwable e, String errorMsg) {
                        Log.e(TAG, "onFailure: "+errorMsg);
                    }
                });

//打印结果: onSuccess: Demo{id='1001', appid='1021', name='sss', showtype='text'}

对返回数据的处理写到这里就结束了、不知道朋友看懂没。

看不懂?  没关系,敲代码实现一下好理解

还是看不懂? 那就多敲几遍。。。。再看不懂  去把作者拉出来溜溜

三、RxHelper调度类封装

忘了从哪里抄来的,这里简单介绍一下。

RxHelper主要是对执行线程和绑定生命周期几个方法进行封装,

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值