NohttpRxUtils-采用Rxjava和MVP模式对Nohttp网络框架请求进行封装

互联网 来源:木子大可_1024 47℃ 0评论

由于NohttpRxUtils是针对Nohttp网络框架的请求方法进行封装,首先对Nohttp网络框架做一个简介

Nohttp是一个专门针对Android网络通讯的框架

Nohttp框架特性

比Retrofit使用更简单、更易用。

动态配置底层框架为OkHttp、HttpURLConnection

支持异步请求、支持同步请求

多文件上传,支持大文件上传,表单提交数据

文件下载、上传下载、上传和下载的进度回调、错误回调

支持Json、xml、Map、List的提交

完美的Http缓存模式,可指定缓存到数据库、SD卡,缓存数据已安全加密

自定义Request,直接请求JsonObject、JavaBean等

Cookie的自动维持,App重启、关开机后还持续维持

http 301 302 303 304 307重定向,支持多层嵌套重定向

Https、自签名网站Https的访问、支持双向验证

失败重试机制,支持请求优先级

GET、POST、PUT、PATCH、HEAD、DELETE、OPTIONS、TRACE等请求协议

用队列保存请求,平均分配多线程的资源,支持多个请求并发

支持取消某个请求、取消指定多个请求、取消所有请求

点击进入-->Nohttp作者博客

NohttpRxUtils-采用Rxjava和MVP模式对Nohttp网络框架请求进行封装

NohttpRxUtils项目结构


NohttpRxUtils项目结构

nohttputils是针对Nohttp请求进行封装的工具,sample是调用nohttputils工具的demo。下面我将讲解如何调用nohttputils工具去请求网络

通过nohttputils工具去初始化Nohttp,并设置底层用那种网络框架去请求


初始化

采用链式调用去初始化nohttp,并设置nohttp底层采用那种网络框架去请求。建议把初始化方法放到Application中onCreate生命周期方法里面。

带网络请求的BaseActivity,sample中再次针对nohttputils工具网络请求方法封装(建议如此封装,也可自己diy封装)


带网络请求的BaseActivity

BaseActivity中实现了三个接口:RequestHttpInterfa<T>,DialogGetInterfa,RequestOkAndNo<T>

RequestHttpInterfa<T>接口:sample网络请求方法调用接口(此接口不属于nohttputils里面定义的接口,允许自己Diy)


RequestHttpInterfa接口


DialogGetInterfa接口:网络请求加载对话框获取接口(nohttputils内部定义的接口,不实现就不弹出加载对话框)



DialogGetInterfa接口


RequestOkAndNo<T>接口:网络请求成功或者失败的接口(nohttputils内部定义的接口)



RequestOkAndNo接口

RequestOkAndNo<T>接口中两个方法介绍

onNext(T response):由于返回的参数是泛型,就是代表任何类型都可以返回。!如果想把网络返回的数据装进指定的对象中,那么该对象的定义请按照Gson框架要求去定义。因为数据转换那层,我是使用了Gson框架。(主线程运行)

onError(Throwable e):在nohttputils内部做了一些错误捕捉提示,如还需自己提示的错误,请自己在实现此方法里面diy。(注:如果此网络请求没有设置加载对话框,那么就无法显示nohttputils内置的错误提示)(主线程运行)

nohttputils中网络请求方法,放到BaseActivity实现RequestHttpInterfa<T>接口方法里面去执行


BaseActivity对象里面执行网络请求方法

//获取网络请求对象RxRequestUtils.getRxRequestUtils()

//创建自定义请求(开始调用)createRequest(url,RequestMethod.POST)

//设置请求参数setRequestParameterMap(mapParame)

//设置请求头参数setMapHeader(mapHeader)

//开始用nohttp请求网络(最后调用) requestRxNoHttp(tClass, this, this);

(注:调用的时候,请记得调用顺序)

其它Activity界面通过继承BaseActivity,实现当前的界面业务和逻辑


Activity

Activity界面网络请求成功回调

当前Activity继承BaseActivity,通过指定当前网络请求成功返回的数据类型。网络请求成功后可以在onNext回调方法里面做自己相应的逻辑和界面控件操作

由于sample我也是是采用MVP模式,所以介绍一下我的presenter-->DemoHttpPresenter<T>网络请求辅助对象


DemoHttpPresenter网络请求辅助对象

DemoHttpPresenter<T>:网络请求辅助对象中的泛型,跟网络请求接口泛型还有网络请求数据返回类型泛型必须一致。

RequestHttpInterfa<T> :网络请求接口

Class<T>:网络请求成功数据返回的类型

DemoHttpPresenter<T>网络请求辅助对象中网络请求调用样板


Https网络请求方法

https参数设置方法(https参数必须按照这个格式去设置)

说句题外话:有人跟我说,你既然使用了rxjava去封装,为什么不针对Observable去封装呢?对于这点,首页当初封装的时候我确实没有想到。还有一点,最最最最重要的一点。我喜欢用这样的方式去封装呀,因为可能省好多脑细胞呀。嘎嘎,反正你又打不到我。

点击下载-->NohttpRxUtils源码

关闭

IT问道推荐

银行贷款频频被拒?
“Dr信用牛牛”让你远离信用污点 国内首家信用健康管理平台免费为你提供信用修复方案