# XSnow
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/bfcabf1d9793485d84f090e542255710)](https://www.codacy.com/app/xiaoyaoyou1212/XSnow?utm_source=github.com&utm_medium=referral&utm_content=xiaoyaoyou1212/XSnow&utm_campaign=Badge_Grade) [![License](https://img.shields.io/badge/License-Apache--2.0-green.svg)](https://github.com/xiaoyaoyou1212/XSnow/blob/master/LICENSE) [![API](https://img.shields.io/badge/API-12%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=12)
基于RxJava2+Retrofit2精心打造的Android基础框架,包含网络、上传、下载、缓存、事件总线、权限管理、数据库、图片加载、UI模块,基本都是项目中必用功能,每个模块充分解耦,可自由拓展。
XSnow,X:未知一切,取其通用之意;Snow:雪,取其纯净之意。该框架通用纯净,只依赖公共核心库。
- 项目地址:[https://github.com/xiaoyaoyou1212/XSnow](https://github.com/xiaoyaoyou1212/XSnow)
- 项目依赖:`compile 'com.vise.xiaoyaoyou:xsnow:2.1.4'`
### 版本说明
[![LatestVersion](https://img.shields.io/badge/LatestVersion-2.1.4-orange.svg)](https://github.com/xiaoyaoyou1212/XSnow/blob/master/VERSION.md)
最新版本更新记录
- V2.1.4(2017-11-29)
- 修复取消所有网络请求出现的java.util.ConcurrentModificationException异常。
### 代码托管
[![JCenter](https://img.shields.io/badge/JCenter-2.1.4-orange.svg)](https://jcenter.bintray.com/com/vise/xiaoyaoyou/xsnow/2.1.4/)
## 效果展示
![操作演示动画](https://github.com/xiaoyaoyou1212/XSnow/blob/master/screenshot/screenshot.gif)
## 网络
### 简介:
网络算是项目的灵魂,基本每个项目都离不开网络,而一个简单好用,又支持各种配置的网络访问库就显得尤为重要了。该模块也是XSnow的核心功能,使用简单,支持定制常用配置,如各种拦截器、缓存策略、请求头等。
如果不进行二次封装,上层项目基于RxJava+Retrofit请求网络时需要每个接口都写一个服务接口,这样非常不便利。如何将响应结果通用处理就成为该模块的重点,项目中采用泛型转换方式,将响应结果ResponseBody通过map操作符转换成需要的T,具体实现参考项目中http包下的func包,如果需要Http响应码,也可以将响应结果包装成Response<ResponseBody>这样进行转换成T,考虑到项目中很少需要Http响应码来进行判定,一般使用服务器自定义的响应码就可以了,故该模块采用ResponseBody统一接收这种处理方式。
### 功能:
- 支持全局配置和单个请求的局部配置,如果局部配置与全局配置冲突,那么局部配置会替换全局配置。
- 全局配置支持`CallAdapter.Factory`、`Converter.Factory`、`okhttp3.Call.Factory`、`SSLSocketFactory`、`HostnameVerifier`、`ConnectionPool`、主机URL、请求头、请求参数、代理、拦截器、Cookie、OKHttp缓存、连接超时时间、读写超时时间、失败重试次数、失败重试间隔时间的一系列配置。
- 局部请求配置支持主机URL、请求后缀、请求头、请求参数、拦截器、本地缓存策略、本地缓存时间、本地缓存key、连接超时时间、读写超时时间的一系列配置。
- 支持OKHttp本身的Http缓存,也支持外部自定义的在线离线缓存,可配置缓存策略,共有五种缓存策略,如优先获取缓存策略,具体实现参考http包下的strategy包。
- 支持请求与响应统一处理,不需要上层每个模块都定义请求服务接口。
- 支持泛型T接收处理响应数据,也可根据服务器返回的统一数据模式定制如包含Code、Data、Message的通用Model ApiResult<T>。由于ApiResult的属性不定,无法做到统一处理,所以单独放到netexpand module中,里面包含与其相关的请求处理,可以根据该module定制属于各自服务器的相关功能。
- 支持异常统一处理,定制了ApiException拦截处理,统一返回异常信息。
- 支持返回Observable,可继续定制请求的相关特性,也支持返回回调的处理结果。
- 支持失败重试机制,可配置失败重试次数以及重试时间间隔。
- 支持根据Tag中途取消请求,也可以取消所有请求。
- ......
### 使用示例:
第一步需要在application中进行全局初始化以及添加全局相关配置,具体使用如下:
```
ViseHttp.init(this);
ViseHttp.CONFIG()
//配置请求主机地址
.baseUrl("http://192.168.1.100/")
//配置全局请求头
.globalHeaders(new HashMap<String, String>())
//配置全局请求参数
.globalParams(new HashMap<String, String>())
//配置读取超时时间,单位秒
.readTimeout(30)
//配置写入超时时间,单位秒
.writeTimeout(30)
//配置连接超时时间,单位秒
.connectTimeout(30)
//配置请求失败重试次数
.retryCount(3)
//配置请求失败重试间隔时间,单位毫秒
.retryDelayMillis(1000)
//配置是否使用cookie
.setCookie(true)
//配置自定义cookie
.apiCookie(new ApiCookie(this))
//配置是否使用OkHttp的默认缓存
.setHttpCache(true)
//配置OkHttp缓存路径
.setHttpCacheDirectory(new File(ViseHttp.getContext().getCacheDir(), ViseConfig.CACHE_HTTP_DIR))
//配置自定义OkHttp缓存
.httpCache(new Cache(new File(ViseHttp.getContext().getCacheDir(), ViseConfig.CACHE_HTTP_DIR), ViseConfig.CACHE_MAX_SIZE))
//配置自定义离线缓存
.cacheOffline(new Cache(new File(ViseHttp.getContext().getCacheDir(), ViseConfig.CACHE_HTTP_DIR), ViseConfig.CACHE_MAX_SIZE))
//配置自定义在线缓存
.cacheOnline(new Cache(new File(ViseHttp.getContext().getCacheDir(), ViseConfig.CACHE_HTTP_DIR), ViseConfig.CACHE_MAX_SIZE))
//配置开启Gzip请求方式,需要服务器支持
.postGzipInterceptor()
//配置应用级拦截器
.interceptor(new HttpLogInterceptor()
.setLevel(HttpLogInterceptor.Level.BODY))
//配置网络拦截器
.networkInterceptor(new NoCacheInterceptor())
//配置转换工厂
.converterFactory(GsonConverterFactory.create())
//配置适配器工厂
.callAdapterFactory(RxJava2CallAdapterFactory.create())
//配置请求工厂
.callFactory(new Call.Factory() {
@Override
public Call newCall(Request request) {
return null;
}
})
//配置连接池
.connectionPool(new ConnectionPool())
//配置主机证书验证
.hostnameVerifier(new SSLUtil.UnSafeHostnameVerifier("http://192.168.1.100/"))
//配置SSL证书验证
.SSLSocketFactory(SSLUtil.getSslSocketFactory(null, null, null))
//配置主机代理
.proxy(new Proxy(Proxy.Type.HTTP, new SocketAddress() {}));
```
后面就是具体调用请求的过程,请求的类型有多种情形,下面就以最常用的几种类型举例说明,具体效果可以查看demo,以下为使用示例:
- GET 不带缓存
```
ViseHttp.GET("getAuthor").request(new ACallback<AuthorModel>() {
@Override
public void onSuccess(AuthorModel authorModel) {
}
@Override
public void onFail(int errCode, String errMsg) {
}
});
```
提供了多种参数的添加方式,具体可查看BaseRequest中提供的API。
- GET 带缓存
```
ViseHttp.GET("getAuthor")
.setLocalCache(true)//设置是否使用缓存,如果使用缓存必须设置为true
.cacheMode(CacheMode.FIRST_CACHE) //配置缓存策略
.request(new ACallback<CacheResult<AuthorModel>>() {
@Override
public void onSuccess(CacheResult<AuthorModel> cacheResul
修行者对666
- 粉丝: 1101
- 资源: 78
最新资源
- 汽车电子软件诊断CDD文件编辑
- Pipelined ADC流水线型ADC全流程设计(模拟集成电路设计) 包括Pipelined ADC的理论分析,从基本的ADC结构到电路原理 包括Pipelined ADC的Matlab建模,从基
- 分布式风电场站模型 改进的10机39节点系统,包含两个风电场,每个风电场含有10台风机 用于分布式风机做风电等值,考虑风电场风速差异,考虑不同风速风电机组的调频能力 包含风电综合惯性控制和转速保护模
- 丝袜材质 1111111111111111111
- 标准IEEE118节点系统模型,加新能源风机和光伏 模型可进行潮流计算,最优潮流,短路计算,暂态稳定性分析,小干扰稳定性分析,电压频率稳定分析,电能质量分析等等等等
- 板状工件清洗step全套技术资料100%好用.zip
- 笔记本键盘检测机sw14可编辑全套技术资料100%好用.zip
- cursor AI 编辑器
- 同步发电机在不平衡电网电压下并网运行仿真模型 复现2019一篇参考文献 在0.5秒的时候电网由平衡状态转变为不平衡状态 在1.5秒的时候有功功率参考值在不平衡电网状态下由15KW升至20KW 从各个波
- 玻璃检测上下料机sw21可编辑全套技术资料100%好用.zip
- 光伏储能交直流微电网Matlab simulink仿真 光伏混合储自(超级电容和蓄电池)的 Matlab 仿真 混合储能系统采用下垂控制,实现蓄电池和超级电容的功率分配;风光储联合控制的matlab仿
- 离散滑模控制(DSMC)+改进高氏趋近律+主动前轮转向(AFS)横摆稳定性控制 包含一个mdl文件,一个绘图m文件,一个cpar文件,一个说明文档和用到的参考文献 支持通过carsim设置工况或s
- bms动力电池管理系统仿真 Battery Simulink电池平衡控制策略模型 动力电池管理系统仿真 BMS + Battery Simulink 控制策略模型, 动力电池物理模型,需求说明文档
- COMSOL复合化学浆液多孔介质注浆数值模拟 针对注浆过程中常用的复合化学浆液注浆问题 应用有限元计算软件COMSOL Multiphysics建立多孔介质化学复合浆液双孔注浆扩散的数值模型
- 两级式单相光伏并网仿真(注意版本matlab 2021a) 前级采用DC-DC变电路,通过MPPT控制DC-DC电路的pwm波来实现最大功率跟踪,mppt采用扰动观察法,后级采用桥式逆变,用spwm波
- 混合储能系统 光储微网 下垂控制 1、仿真由光伏发电系统和混合储能系统构成直流微网 2、混合储能系统由超级电容器和蓄电池构成,通过控制混合储能系统来维持直流母线电压稳定 3、混合储能系统采用下垂控
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈