RxJava+Retrofit网络请求终极封装

来源:互联网 发布:淘宝e宠商城旗舰店 编辑:程序博客网 时间:2024/05/18 18:43

大家都想在自己的项目中用最简单,最易懂的方式实现功能需求,对于网络请求,而且是基于RxJava+Retrofit,本世纪最先进的网络框架的封装我们该如何封装呢

接下来我说一下使用步骤具体请看我给出的源码地址

下载依赖

一、封装功能

  • 统一处理请求数据格式
  • 统一的ProgressDialog和回调Subscriber处理
  • 取消http请求
  • 预处理http请求
  • 返回数据的统一判断
  • 失败后的retry封装处理
  • RxLifecycle管理生命周期,防止泄露
  • 文件上传下载(支持多文件,断点续传)
  • Cache数据持久化和数据库(greenDao)两种缓存机制
  • 异常统一处理

一、配置

  • 以model的形式导入依赖到自己的工程并建立依赖关系 依赖地址
  • 工程gradle里加入
dependencies {        classpath 'com.android.tools.build:gradle:2.2.2'        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'    }
  • 冒视要删掉
 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })
  • IApplication OnCreat()中然后使用本IApplication
RxRetrofitApp.init(this,BuildConfig.DEBUG);
  • 权限
<uses-permission android:name="android.permission.INTERNET"/>    <!-- 网络状态权限 -->    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

下面介绍怎么使用本框架

一、框架使用步骤

我们这里对下面这个网址进行数据请求

https://appapi.daqsoft.com/sxhtams/rest/sxhAppData/appData.action?method=queryAppMonitorLists&vcode=d80f699c062c8662fad3df86024e246c

1、修改依赖包BaseResultEntity

一家公司的数据基本上有统一的格式,我们只需抽取data需要的数据出来就行
BaseResultEntity是我们数据获取的基础格式比如
这里写图片描述

我们只关心datas数据哈,根据你公司的习惯改成对应的就是。,然后把需要的databean类方便后面使用

参见项目 BaseResultEntity

2、修改依赖包BaseApi基础数据类型

修改BaseApi的方法 call回调错误 信息统一处理。
然后修改baseUrl成自己的,或者外面动态设置

3、建立自己的API设置请求参数

package com.example.retrofit.example.api;import com.example.retrofit.example.services.MyService;import com.trello.rxlifecycle.components.support.RxAppCompatActivity;import com.wzgiceman.rxretrofitlibrary.retrofit_rx.Api.BaseApi;import com.wzgiceman.rxretrofitlibrary.retrofit_rx.listener.HttpOnNextListener;import retrofit2.Retrofit;import rx.Observable;/** * Created by yanbo on 2017/6/13. */public class ExampleApi extends BaseApi{    //请求需要的参数,    private String method;//app_api方法名    private String vcode;//景区vcode    //get set 参数    public String vCode() {        return vcode;    }    public void setVcode(String vcode) {        this.vcode = vcode;    }    public String mEthod() {        return method;    }    public void setMethod(String method) {        this.method = method;    }    public ExampleApi(HttpOnNextListener listener, RxAppCompatActivity rxAppCompatActivity) {        super(listener, rxAppCompatActivity);        setShowProgress(true);        setCancel(true);        setCache(true);        setMothed("appData.action");        setCookieNetWorkTime(60);        setCookieNoNetWorkTime(24*60*60);    }    @Override    public Observable getObservable(Retrofit retrofit) {        MyService myService = retrofit.create(MyService.class);        return myService.getVideoList(mEthod(),vCode());    }}

4、建立自己的Service

public interface MyService {    @GET("appData.action")    Observable<BaseResultEntity<VideoBean>> getVideoList(@Query("method") String method,@Query("vcode") String vcode);}

好了万事具备只欠东风了我们把镜头转向需要进行网络请求的页面。

5、创建HttpOnNextListenerhuid回调接口

首先我们使页面继承extends RxAppCompatActivity(要管理Rx生命周期)

//回调    HttpOnNextListener videoOnNextListener = new HttpOnNextListener<VideoBean>() {        @Override        public void onNext(VideoBean videoBean) {            Log.e("----------","网络返回"+videoBean.toString());        }        @Override        public void onCacheNext(String cache) {            /*缓存回调*/            Gson gson=new Gson();            java.lang.reflect.Type type = new TypeToken<BaseResultEntity<VideoBean>>() {}.getType();            BaseResultEntity resultEntity= gson.fromJson(cache, type);            Log.e("----------","缓存返回"+resultEntity.getDatas().toString());        }        /*用户主动调用,默认是不需要覆写该方法*/        @Override        public void onError(Throwable e) {            super.onError(e);            Log.e("----------","失败"+e.toString());        }        /*用户主动调用,默认是不需要覆写该方法*/        @Override        public void onCancel() {            super.onCancel();            Log.e("----------","取消请求");        }    };

6、请求回调处理

点击按钮执行这方法进行网络请求

    private void showHttp() {        VideoApi api = new VideoApi(videoOnNextListener,this);        //请求参数        api.setMethod("queryAppMonitorLists");        api.setVcode("d80f699c062c8662fad3df86024e246c");        HttpManager manager = HttpManager.getInstance();        manager.doHttpDeal(api);    }

请看日志

这里写图片描述

功能待续,还没介绍完哈

原创粉丝点击