OkHttp+RxJava 超好用的Http请求框架,支持任意Http请求方式,如:Get、Post、Head、Put等;也支持任意数据解析方法,如:Json、DOM解析等;并且可以很优雅的实现上传/下载进度的监听
博客地址:https://blog.csdn.net/liujingxing93/article/details/86600477
Gradle引用方法
dependencies {
//HttpSender
implementation 'com.http.wrapper:httpsender:1.1.6'
//RxLife 管理RxJava生命周期
implementation 'com.rxjava.rxlife:rxlife:1.0.4'
//注解处理器
annotationProcessor 'com.http.wrapper.httpsender:compiler:1.0.5'
}
注解使用请查看:https://blog.csdn.net/liujingxing93/article/details/88894126
Get请求
String url = "http://ip.taobao.com/service/getIpInfo.php";
Param param = Param.get(url) //这里get,代表Get请求
.add("ip", "63.223.108.42")//添加参数
.addHeader("accept", "*/*") //添加请求头
.addHeader("connection", "Keep-Alive")
.addHeader("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
Disposable disposable = HttpSender
.from(param, new DataParser<Address>() {}) //from操作符,是异步操作
.observeOn(AndroidSchedulers.mainThread()) //主线程回调
.as(RxLife.as(this)) //加入感知生命周期的观察者
.subscribe(address -> {
//accept方法参数类型由上面DataParser传入的泛型类型决定
//走到这里说明Http请求成功,并且数据正确
}, throwable -> {
//Http请求出现异常,有可能是网络异常,数据异常等
});
Generated API Get请求
String url = "http://ip.taobao.com/service/getIpInfo.php";
Disposable disposable = Params.get(url) //这里get,代表Get请求
.add("ip", "63.223.108.42")//添加参数
.addHeader("accept", "*/*") //添加请求头
.addHeader("connection", "Keep-Alive")
.addHeader("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
.fromDataParser(Address.class) //from操作符,是异步操作
.observeOn(AndroidSchedulers.mainThread()) //主线程回调
.as(RxLife.as(this)) //加入感知生命周期的观察者
.subscribe(address -> {
//accept方法参数类型由上面DataParser传入的泛型类型决定
//走到这里说明Http请求成功,并且数据正确
}, throwable -> {
//Http请求出现异常,有可能是网络异常,数据异常等
});
Post请求
String url = "http://ip.taobao.com/service/getIpInfo.php";
Param param = Param.postForm(url) //发送Form表单形式的Post请求
.add("ip", "63.223.108.42")//添加参数
.addHeader("accept", "*/*") //添加请求头
.addHeader("connection", "Keep-Alive")
.addHeader("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
Disposable disposable = HttpSender
.from(param, new DataParser<Address>() {}) //from操作符,是异步操作
.observeOn(AndroidSchedulers.mainThread()) //主线程回调
.as(RxLife.as(this)) //加入感知生命周期的观察者
.subscribe(address -> {
//accept方法参数类型由上面DataParser传入的泛型类型决定
//走到这里说明Http请求成功,并且数据正确
}, throwable -> {
//Http请求出现异常,有可能是网络异常,数据异常等
});
Generated API Post请求
String url = "http://ip.taobao.com/service/getIpInfo.php";
Disposable disposable = Params.postForm(url) //发送Form表单形式的Post请求
.add("ip", "63.223.108.42")//添加参数
.addHeader("accept", "*/*") //添加请求头
.addHeader("connection", "Keep-Alive")
.addHeader("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
.fromDataParser(Address.class) //from操作符,是异步操作
.observeOn(AndroidSchedulers.mainThread()) //主线程回调
.as(RxLife.as(this)) //加入感知生命周期的观察者
.subscribe(address -> {
//accept方法参数类型由上面DataParser传入的泛型类型决定
//走到这里说明Http请求成功,并且数据正确
}, throwable -> {
//Http请求出现异常,有可能是网络异常,数据异常等
});
上传文件
String url = "http://www.......";
Param param = Param.postForm(url) //发送Form表单形式的Post请求
.add("file1", new File("xxx/1.png"))
.add("file2", new File("xxx/2.png"))
.add("key1", "value1")//添加参数,非必须
.add("key2", "value2")//添加参数,非必须
.addHeader("versionCode", "100"); //添加请求头,非必须
Disposable disposable = HttpSender
.from(param, new SimpleParser<String>() {}) //注:如果需要监听上传进度,使用upload操作符
.as(RxLife.as(this)) //加入感知生命周期的观察者
.subscribe(s -> { //s为String类型,由SimpleParser类里面的泛型决定的
//上传成功,处理相关逻辑
}, throwable -> {
//上传失败,处理相关逻辑
});
Generated API 上传文件
String url = "http://www.......";
Disposable disposable = Params.postForm(url) //发送Form表单形式的Post请求
.add("file1", new File("xxx/1.png"))
.add("file2", new File("xxx/2.png"))
.add("key1", "value1")//添加参数,非必须
.add("key2", "value2")//添加参数,非必须
.addHeader("versionCode", "100"); //添加请求头,非必须
.fromSimpleParser(String.class) //注:如果需要监听上传进度,使用upload操作符
.as(RxLife.as(this)) //加入感知生命周期的观察者
.subscribe(s -> { //s为String类型,由SimpleParser类里面的泛型决定的
//上传成功,处理相关逻辑
}, throwable -> {
//上传失败,处理相关逻辑
});
上传文件进度监听
String url = "http://www.......";
Param param = Param.postForm(url) //发送Form表单形式的Post请求
.add("file1", new File("xxx/1.png"))
.add("file2", new File("xxx/2.png"))
.add("key1", "value1")//添加参数,非必须
.add("key2", "value2")//添加参数,非必须
.addHeader("versionCode", "100"); //添加请求头,非必须
Disposable disposable = HttpSender
.upload(param, new SimpleParser<String>() {}) //注:如果需要监听上传进度,使用upload操作符
.observeOn(AndroidSchedulers.mainThread()) //主线程回调
.doOnNext(progress -> {
//上传进度回调,0-100,仅在进度有更新时才会回调
int currentProgress = progress.getProgress(); //当前进度 0-100
long currentSize = progress.getCurrentSize(); //当前已上传的字节大小
long totalSize = progress.getTotalSize(); //要上传的总字节大小
})
.filter(Progress::isCompleted)//过滤事件,上传完成,才继续往下走
.map(Progress::getResult) //到这,说明下载完成,拿到Http返回结果并继续往下走
.as(RxLife.as(this)) //加入感知生命周期的观察者
.subscribe(s -> { //s为String类型,由SimpleParser类里面的泛型决定的
//上传成功,处理相关逻辑
}, throwable -> {
//上传失败,处理相关逻辑
});
Generated API 上传文件进度监听
String url = "http://www.......";
Disposable disposable = Params.postForm(url) //发送Form表单形式的Post请求
.add("file1", new File("xxx/1.png"))
.add("file2", new File("xxx/2.png"))
.add("key1", "value1")//添加参数,非必须
.add("key2", "value2")//添加参数,非必须
.addHeader("versionCode", "100"); //添加请求头,非必须
.upload(new SimpleParser<String>() {}) //注:如果需要监听上传进度,使用upload操作符
.observeOn(AndroidSchedulers.mainThread()) //主线程回调
.doOnNext(progress -> {
//上传进度回调,0-100,仅在进度有更新时才会回调
int currentProgress = progress.getProgress(); //当前进度 0-100
long currentSize = progress.getCurrentSize(); //当前已上传的字节大小
long totalSize = progress.getTotalSize(); //要上传的总字节大小
})
.filter(Progress::isCompleted)//过滤事件,上传完成,才继续往下走
.map(Progress::getResult) //到这,说明下载完成,拿到Http返回结果并继续往下走
.as(RxLife.as(this)) //加入感知生命周期的观察者
.subscribe(s -> { //s为String类型,由SimpleParser类里面的泛型决定的
//上传成功,处理相关逻辑
}, throwable -> {
//上传失败,处理相关逻辑
});
下载文件
String url = "http://update.9158.com/miaolive/Miaolive.apk";
String destPath = getExternalCacheDir() + "/" + System.currentTimeMillis() + ".apk";
Param param = Param.get(url); //这里get,代表Get请求
Disposable disposable = HttpSender
.from(param, new DownloadParser(destPath) {}) //这里使用DownloadParser解析器
.observeOn(AndroidSchedulers.mainThread()) //主线程回调
.as(RxLife.as(this)) //加入感知生命周期的观察者
.subscribe(s -> { //s为String类型
//下载成功,处理相关逻辑
}, throwable -> {
//下载失败,处理相关逻辑
});
Generated API 下载文件
String url = "http://update.9158.com/miaolive/Miaolive.apk";
String destPath = getExternalCacheDir() + "/" + System.currentTimeMillis() + ".apk";
Disposable disposable = Params.get(url) //这里get,代表Get请求
.from(new DownloadParser(destPath) {}) //这里使用DownloadParser解析器
.observeOn(AndroidSchedulers.mainThread()) //主线程回调
.as(RxLife.as(this)) //加入感知生命周期的观察者
.subscribe(s -> { //s为String类型
//下载成功,处理相关逻辑
}, throwable -> {
//下载失败,处理相关逻辑
});
下载文件进度监听
String url = "http://update.9158.com/miaolive/Miaolive.apk";
String destPath = getExternalCacheDir() + "/" + System.currentTimeMillis() + ".apk";
Param param = Param.get(url); //这里get,代表Get请求
Disposable disposable = HttpSender
.download(param, destPath) //下载进度监听,使用download操作符
.observeOn(AndroidSchedulers.mainThread()) //主线程回调
.doOnNext(progress -> {
//下载进度回调,0-100,仅在进度有更新时才会回调
int currentProgress = progress.getProgress(); //当前进度 0-100
long currentSize = progress.getCurrentSize(); //当前已下载的字节大小
long totalSize = progress.getTotalSize(); //要下载的总字节大小
})
.filter(Progress::isCompleted)//过滤事件,下载完成,才继续往下走
.map(Progress::getResult) //到这,说明下载完成,拿到Http返回结果并继续往下走
.as(RxLife.as(this)) //加入感知生命周期的观察者
.subscribe(s -> { //s为String类型
//下载成功,处理相关逻辑
}, throwable -> {
//下载失败,处理相关逻辑
});
Generated API 下载文件进度监听
String url = "http://update.9158.com/miaolive/Miaolive.apk";
String destPath = getExternalCacheDir() + "/" + System.currentTimeMillis() + ".apk";
Disposable disposable = Params.get(url) //这里get,代表Get请求
.download(destPath) //下载进度监听,使用download操作符
.observeOn(AndroidSchedulers.mainThread()) //主线程回调
.doOnNext(progress -> {
//下载进度回调,0-100,仅在进度有更新时才会回调
int currentProgress = progress.getProgress(); //当前进度 0-100
long currentSize = progress.getCurrentSize(); //当前已下载的字节大小
long totalSize = progress.getTotalSize(); //要下载的总字节大小
})
.filter(Progress::isCompleted)//过滤事件,下载完成,才继续往下走
.map(Progress::getResult) //到这,说明下载完成,拿到Http返回结果并继续往下走
.as(RxLife.as(this)) //加入感知生命周期的观察者
.subscribe(s -> { //s为String类型
//下载成功,处理相关逻辑
}, throwable -> {
//下载失败,处理相关逻辑
});
更新日志
HttpSender 1.1.5
1.File download supports breakpoint continuation
1.1.4
1.add ListParser class
2.delete StringParser class
1.1.2 1.remove LifecycleObserver
1.1.1
- Add log print switch
1.1.0
- Remove androidx
1.0.9
- Tag and CacheControl can be set for a single request
1.0.0
- Support Http requests such as get, Post, Put, Delete, etc
- Support file upload, download and progress callback
- Combined with RxJava, chain call
- more wonderful, waiting for you to find
HttpSender compiler
1.0.5
1.add fromXXX methods in Params
2.add addXXX methods in Params
1.0.4
- Tag and CacheControl can be set for a single request 2.need to combine HttpSender with version 1.0.9 or above
1.0.3
- Fixed an error reported by the @parser generated method
1.0.2
- Add the prefix ‘setDomain' to the @domain name
1.0.0
- add @Param @Parser @Domain annotation