RxHttp.postForm(“http://…”) //发送Form表单形式的Post请求
.add(“key”, “value”)
.add(“file1”, new File(“xxx/1.png”)) //添加file对象
.add(“file2”, new File(“xxx/2.png”))
.from() //from操作符,是异步操作
.as(RxLife.asOnMain(this)) //感知生命周期,并在主线程回调
.subscribe(s -> {
//上传成功,拿到Http返回值,这里返回值为String类型
}, throwable -> {
//上传失败
});

注:如果需要对Http的返回值做解析,可在使用from操作符时,传入一个解析器Parser

带进度上传

带进度上传使用uploadProgress操作符,并结合doOnNextfiltermap即可

RxHttp.postForm(“http://www…”) //发送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”) //添加请求头,非必须
.uploadProgress() //注:如果需要监听上传进度,使用uploadProgress操作符
.observeOn(AndroidSchedulers.mainThread()) //主线程回调
.doOnNext(progress -> {
//上传进度回调,0-100,仅在进度有更新时才会回调,最多回调101次,最后一次回调Http执行结果
int currentProgress = progress.getProgress(); //当前进度 0-100
long currentSize = progress.getCurrentSize(); //当前已上传的字节大小
long totalSize = progress.getTotalSize(); //要上传的总字节大小
String result = progress.getResult(); //Http执行结果,最后一次回调才有内容
})
.filter(Progress::isCompleted)//过滤事件,上传完成,才继续往下走
.map(Progress::getResult) //到这,说明上传完成,拿到Http返回结果并继续往下走
.as(RxLife.as(this)) //感知生命周期
.subscribe(s -> { //s为String类型,由SimpleParser类里面的泛型决定的
//上传成功,处理相关逻辑
}, throwable -> {
//上传失败,处理相关逻辑
});

注:如果需要对Http的返回值做解析,可在使用uploadProgress操作符时,传入一个解析器Parser

下载

//文件存储路径
String destPath = getExternalCacheDir() + “/” + System.currentTimeMillis() + “.apk”;
RxHttp.get(“http://update.9158.com/miaolive/Miaolive.apk”)
.download(destPath) //注意这里使用download操作符,并传入本地路径
.as(RxLife.asOnMain(this)) //感知生命周期,并在主线程回调
.subscribe(s -> {
//下载成功,回调文件下载路径
}, throwable -> {
//下载失败
});

带进度下载

带进度下载使用downloadProgress操作符,并结合doOnNextfiltermap即可

//文件存储路径
String destPath = getExternalCacheDir() + “/” + System.currentTimeMillis() + “.apk”;
RxHttp.get(“http://update.9158.com/miaolive/Miaolive.apk”)
.downloadProgress(destPath) //注:如果需要监听下载进度,使用downloadProgress操作符
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(progress -> {
//下载进度回调,0-100,仅在进度有更新时才会回调,最多回调101次,最后一次回调文件存储路径
int currentProgress = progress.getProgress(); //当前进度 0-100
long currentSize = progress.getCurrentSize(); //当前已下载的字节大小
long totalSize = progress.getTotalSize(); //要下载的总字节大小
String filePath = progress.getResult(); //文件存储路径,最后一次回调才有内容
})
.filter(Progress::isCompleted)//下载完成,才继续往下走
.map(Progress::getResult) //到这,说明下载完成,返回下载目标路径
.as(RxLife.as(this)) //感知生命周期
.subscribe(s -> {//s为String类型,这里为文件存储路径
//下载完成,处理相关逻辑
}, throwable -> {
//下载失败,处理相关逻辑
});

断点下载

断点下载相较于下载,仅仅是添加了RANGE头信息而已,其它没有任何差别

String destPath = getExternalCacheDir() + “/” + “Miaobo.apk”;
long length = new File(destPath).length(); //已下载的文件长度
RxHttp.get(“http://update.9158.com/miaolive/Miaolive.apk”)
//如果文件存在,则添加 RANGE 头信息 ,从上次断开的点,开始下载
.addHeader(“RANGE”, “bytes=” + length + “-”, length > 0)
.download(destPath)
.as(RxLife.as(this)) //加入感知生命周期的观察者
.subscribe(s -> { //s为String类型
Log.e(“LJX”, “breakpointDownloadAndProgress=” + s);
//下载成功,处理相关逻辑
}, throwable -> {
//下载失败,处理相关逻辑
});

带进度断点下载

带进度断点下载相较于带进度下载,仅仅是添加了RANGE头信息而已,其它没有任何差别

String destPath = getExternalCacheDir() + “/” + “Miaobo.apk”;
long length = new File(destPath).length(); //已下载的文件长度
RxHttp.get(“http://update.9158.com/miaolive/Miaolive.apk”)
//如果文件存在,则添加 RANGE 头信息 ,从上次断开的点,开始下载
.addHeader(“RANGE”, “bytes=” + length + “-”, length > 0)
.downloadProgress(destPath)
.observeOn(AndroidSchedu

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

lers.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 -> {
//下载失败,处理相关逻辑

Android-史上最优雅的实现文件上传、下载及进度的监听,androidrom开发面试题相关推荐

  1. Android OkHttp+RxJava 史上最优雅的实现文件上传/下载进度的监听

    本文已授权「刘望舒」微信公众号独家原创发布 前言 本文将直接使用RxHttp库实现文件上传.下载.断点下载.进度的监听,不对RxHttp做过多讲解,如果对RxHttp不了解,请移步 RxHttp 一条 ...

  2. android上传图片文件至c 服务器,Android 史上最优雅的实现文件上传、下载及进度的监听...

    本文已授权「刘望舒」微信公众号独家原创发布 前言 本文将直接使用RxHttp库实现文件上传.下载.断点下载.进度的监听,不对RxHttp做过多讲解,如果对RxHttp不了解,请移步 本文目的在于让更多 ...

  3. png文件头_Android 史上最优雅的实现文件上传、下载及进度的监听

    作者丨Android技术干货分享https://www.jianshu.com/p/d643f5a8fead 前言 本文将直接使用RxHttp库实现文件上传.下载.断点下载.进度的监听,不对RxHtt ...

  4. Android-史上最优雅的实现文件上传、下载及进度的监听,android自定义控件开发入门与实战

    注:如果需要对Http的返回值做解析,可在使用uploadProgress操作符时,传入一个解析器Parser 下载 //文件存储路径 String destPath = getExternalCac ...

  5. Android-史上最优雅的实现文件上传、下载及进度的监听,网易严选Android开发三面面经

    .add("key", "value") .add("file1", new File("xxx/1.png")) // ...

  6. Android-史上最优雅的实现文件上传、下载及进度的监听,flutter热更新方案

    }); 注:如果需要对Http的返回值做解析,可在使用from操作符时,传入一个解析器Parser 带进度上传 带进度上传使用uploadProgress操作符,并结合doOnNext.filter. ...

  7. 后端怎么接收map_史上最全,C++后端开发面试题与知识点汇总

    以下汇总C++后台开发面试题与知识点,还有其他岗位的相关题库和资料,想要什么岗位的可以留言哦~ 附面试题目: 一.基础知识 1.基本语言 说一下C++和C的区别 说一下C++中static关键字的作用 ...

  8. springboot:实现文件上传下载实时进度条功能【附带源码】

    0. 引言 记得刚入行的时候,做了一个文件上传的功能,因为上传时间较久,为了用户友好性,想要添加一个实时进度条,显示进度.奈何当时技术有限,查了许久也没用找到解决方案,最后不了了之. 近来偶然想到这个 ...

  9. ubuntu下linux:curl使用ftp获取服务器上指定目录的所有文件集合以及下载

    curl使用ftp获取服务器上指定目录的所有文件集合以及下载 直接编译可用,注意修改测试main函数内的字符串,注释我觉得写的挺详细了,跑不起来的评论区可问 头文件 #ifndef FTP_DOWNL ...

最新文章

  1. 8 个你必须要掌握的 GitHub 实用技巧!
  2. [云炬商业计划书阅读分享]袜子广告策划方案
  3. can协议解析字符串的原理
  4. arraylist获取前多少位_Java 面试题 :百度前 200 页都在这里
  5. [css] 你知道全屏滚动的原理是什么吗?它用到了CSS的哪些属性?
  6. mysqlmodify_modify与change的区别
  7. anaconda进出某个环境
  8. 2020计算机二级取消vb,2020年计算机二级VB模拟试题及答案
  9. 使用DroidCam将手机作为PC的摄像头
  10. 用友U8去除凭证外部凭证标记
  11. SEO与SEM有什么区别?
  12. 【基于Pytorch的手写汉字识别】
  13. 众包专访:开源众包让我安心——开源中国众包使用记录
  14. 计算机内存容量影响游戏的吗,内存容量对整机游戏性能影响有多大?
  15. python功率谱,直接法和间接法
  16. 新手安装R以及Rstudio软件
  17. 采集微信公众号文章只需几步(非搜狗微信)
  18. Linux中make命令详解
  19. 【HDLBits 刷题 4】Verilog Language(4)Procedures 和 More Verilog Features 部分
  20. PHP熊猫头图片表情斗图生成源码

热门文章

  1. 【开心一刻】程序员的土味情话,你知道多少?
  2. 中兴软创Java实习生面试题目
  3. 实达集团并购中科融通 涉足物联网领域
  4. Excel VBA将选择区域右移一列
  5. excel如何将指定内容移动到指定位置
  6. window 查看文件大小工具(TreeSize)
  7. Verilog——将单脉冲宽度信号变为双脉冲宽度信号(扩宽脉冲宽度)
  8. 您安心的走吧——5.17晚一夜天降小雨祭文 (献给爸爸,祭文,之三)
  9. Phaser笔记-鼠标点击获取坐标键盘控制sprite
  10. oracle 多表联查修改