大家平时使用七牛云SDK上传图片的时候,SDK只支持一次上传一个图片,如果需要一次上传多张图片,总不能让用户选一个上传一个把,也可以选多图,利用for循环上传,但是这样会导致上传的图片顺序颠倒,因为图片的大小不一样,有的上传快,有的上传慢。所以接下来我给大家介绍的是利用Rxjava实现七牛云多图上传。
需要用到的操作符:fromIterable、concatMap。
fromIterable:是指逐个发射指定的值如 List;
concatMap:concatMap操作符和flatMap是非常相似,concatMap 最终输出的数据序列和原数据序列是一致,它是按顺序链接Observables,而不是合并,说白了就是按顺序来的,这样不会导致七牛云上传的图片顺序颠倒。
不多说了,直接上代码。
图1图中的qiNiuFiles其实就是一个List<qiNiuFiles> qiNiuFiles = new ArrayList(); 其中包含了你要上传的图片路径,key,token。上传之前需要你先把图片路径,token填进去,
然后QiniuParams 也是一个实体类,里面包含的是七牛云返回的信息。
然后再concatMap中的apply方法中返回一个自定义的QiNiuPathOnSubscribe。代码如图:
QiNiuPathOnSubscribe在subscribe方法中写上传的逻辑,上传成功后 emitter.onNext(); 把七牛云返回数据回调出去,上传失败就onError()。
接下来再接着图一的代码看:
图3这时候在外部的onNext onError onComplete中就可以接收到七牛云返回的参数,或者错误信息。
onNext中可以把你想要的参数 add进自己的list中。onComplete就代表所有的图片上传完成了,可以关闭dialog或者进度条之类的东西。
整体上大概就是这样,有问题欢迎指正。
网友评论