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); }
请看日志
功能待续,还没介绍完哈
阅读全文
0 0
- RxJava+Retrofit网络请求终极封装
- RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)
- RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)
- RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)
- RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)
- 封装Retrofit + okhttp + rxjava网络请求框架
- RXJava+Retrofit网络请求
- Retrofit与RxJava相结合的网络请求封装
- retrofit+RxJava+okhttp简便封装实现网络请求(详解)
- RxJava与Retrofit封装简单的网络请求(二)
- Retrofit和RxJava加OkHttp网络请求进行二次封装
- Android 单例模式封装 RxJava+Retrofit 网络请求
- Rxjava+ReTrofit+okHttp深入浅出-终极封装
- RxJava+Retrofit+OkHttp 深入浅出-终极封装一
- 终极封装 Rxjava+Retrofit+okhttp+mvp实现
- Rxjava和Retrofit网络封装
- Retrofit+Rxjava网络封装框架
- RxJava + Retrofit完成网络请求
- Android7.0中文文档(API)-- AbsListView.MultiChoiceModeListener
- 第三十九天:Aurora组件lov的用法
- autobench
- 树状数组 cows
- 使用Python xlwt写excel文件
- RxJava+Retrofit网络请求终极封装
- java的四种引用
- jetty 加载包含spring的web,报ClassNotFoundException异常,找不到ContextLoaderListener类
- Azkaban安装部署,配置文件配置,启动等
- org.gradle.api.internal.tasks错误解决
- Git撤销修改
- javascript立即执行函数表达式(IIFE)
- java jxl下载excel表格
- 【实训】第七周总结上