RxJava+Retrofit网络请求终极封装


大家都想在自己的项目中用最简单,最易懂的方式实现功能需求,对于网络请求,而且是基于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);
    }

请看日志

这里写图片描述

功能待续,还没介绍完哈

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值