RxVolley = Volley + RxJava + OkHttp
=================
RxVolley是一个基于Volley的网络请求库,同时支持RxJava。
并且允许用OKHttp替代默认的 HttpUrlConnection 做网络请求;
可以选择使用图片加载功能(复用的网络请求将有效减少apk体积);
移除了原Volley的 HttpClient 相关 API ,可在 API23 环境编译;
内置了RxBus的实现,可有效替换掉EventBus等相关库;
使用RxVolley,需要在你的根build.gradle文件中加入
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}对应的模块build.gradle中引入依赖:
implementation 'com.github.kymjs.rxvolley:rxvolley:3.0.6'如果你还想使用OKhttp来替代默认的HttpUrlconnection,需要加入
implementation 'com.github.kymjs.rxvolley:okhttp3:3.0.6'
//或者 okhttp2(二选一)
implementation 'com.github.kymjs.rxvolley:okhttp:3.0.6'如果你想使用RxVolley的图片加载功能(复用http模块可以有效减少apk大小),需要加入
implementation 'com.github.kymjs.rxvolley:image:3.0.6'//get请求简洁版实现
RxVolley.get("https://www.kymjs.com/feed.xml", new HttpCallback() {
@Override
public void onSuccess(String t) {
Loger.debug("请求到的数据:" + t);
}
});
// post请求简洁版实现
HttpParams params = new HttpParams();
params.put("name", "kymjs");
params.put("age", 18);
params.put("image", new File("path"))//文件上传
RxVolley.post("https://kymjs.com/feed.xml", params, new HttpCallback() {
@Override
public void onSuccess(String t) {
Loger.debug("请求到的数据:" + t);
}
});//用户登录逻辑(HttpCallback中有很多重载方法,可以选择需要的实现)
HttpParams params = new HttpParams();
params.put("name", "kymjs");
params.put("age", 18);
params.put("password", "helloword");
RxVolley.post("https://kymjs.com/login", params, new HttpCallback() {
@Override
public void onSuccess(Map headers, byte[] t) {
Loger.debug("请求到的数据:" + new String(t));
// 获取到的cookie
Loger.debug("===" + headers.get("Set-Cookie"));
}
});//向服务器传递cookie信息
HttpParams params = new HttpParams();
params.put("name", "kymjs");
params.put("age", 100);
params.putHeaders("cookie", "your cookie");
RxVolley.post("https://kymjs.com/update", params, new HttpCallback() {
@Override
public void onSuccess(String t) {
Loger.debug("请求到的数据:" + t);
}
});比起 入门 章节讲述的网络请求,你可能希望有更多的需求
…RxVolley 支持返回一个 Observable 类型的数据,如下是 Result 类的原型
public class Result {
public String url;
public byte[] data;
public VolleyError error;
public Map headers;
public int errorCode;
}Observable observable = new RxVolley.Builder()
.url("https://www.kymjs.com/rss.xml")
//default GET or POST/PUT/DELETE/HEAD/OPTIONS/TRACE/PATCH
.httpMethod(RxVolley.Method.POST)
.cacheTime(6) //default: get 5min, post 0min
.params(params)
.contentType(RxVolley.ContentType.JSON)
.getResult(); // 使用getResult()来返回RxJava数据类型
//当拿到 observable 对象后,你可以设置你自己的 subscriber
observable.subscribe(subscriber);
…也许你是 Volley 的重度使用者(就像我),那么你一定是因为 Volley 自由的扩展性而爱上它的。
你可以通过创建一个Request的子类,自由配置请求策略,缓存策略,数据传输加密,重试策略等。
最后通过
RxVolley.Builder().setRequest(yourRequest).doTask();去执行你的自定义 Request
一个典型自定义Request的示例:
…利用 RxVolley 的自定义请求,在库中内置了文件下载功能。你可以使用
…既然说了下载功能是利用 RxVolley 的自定义请求创建的,不妨看看他的方法实现:
…理论上来说,一切的请求设置都可以通过自定义 Request 来完成。
但是,如果你和我一样是个懒人,当然更希望这些早就有人已经做好了。
默认的文件缓存路径是在SD卡根目录的 /RxVolley 文件夹下,你可以通过如下语句设置你的 cacheFolder
RxVolley.setRequestQueue(RequestQueue.newRequestQueue(cacheFolder));需要注意的是,setRequestQueue 方法必须在 BitmapCore.Build() 和 RxVolley.Build() 方法执行之前调用,也就是在使用 RxVolley 以前先设置配置信息。建议在 Application 类中完成这些设置。
如果不设置,默认信任全部的https证书。可以传入自定义 SSLSocketFactory
RxVolley.setRequestQueue(RequestQueue.newRequestQueue(cacheFolder), new HttpConnectStack(null, sslSocketFactory));需要注意的是,setRequestQueue 方法必须在 RxVolley.Build() 方法执行之前调用,也就是在使用 RxVolley 以前先设置配置信息。建议在 Application 类中完成这些设置。
一个自定义设置SSLSocketFactory的相关示例:
//下载的证书放到项目中的assets目录中
InputStream ins = context.getAssets().open("app_pay.cer");
CertificateFactory cerFactory = CertificateFactory
.getInstance("X.509");
Certificate cer = cerFactory.generateCertificate(ins);
KeyStore keyStore = KeyStore.getInstance("PKCS12", "BC");
keyStore.load(null, null);
keyStore.setCertificateEntry("trust", cer);
SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore);
RxVolley.setRequestQueue(RequestQueue.newRequestQueue(RxVolley.cacheFolder()), new HttpConnectStack(null, sslSocketFactory));//请求超时时间
timeout()
//为了更真实的模拟网络,如果读取缓存,延迟一段时间再返回缓存内容
delayTime()
//缓存有效时间,单位分钟
cacheTime()
//使用服务器控制的缓存有效期,即cookie有效期
//(如果使用服务器端控制,则无视#cacheTime())
useServerControl()
//启用缓存
shouldCache()
//重连策略,Volley默认的重连策略是timeout=3000,重试1次
retryPolicy()
本项目已被乐视TV、沪江网校使用。
你也可以提交Pull Request告诉我你的 APP 使用了RxVolley
No open issues yet, or sync has not completed.