大家平時使用七牛云SDK上傳圖片的時候潜腻,SDK只支持一次上傳一個圖片,如果需要一次上傳多張圖片器仗,總不能讓用戶選一個上傳一個把融涣,也可以選多圖,利用for循環(huán)上傳精钮,但是這樣會導致上傳的圖片順序顛倒威鹿,因為圖片的大小不一樣,有的上傳快轨香,有的上傳慢忽你。所以接下來我給大家介紹的是利用Rxjava實現(xiàn)七牛云多圖上傳。
需要用到的操作符:fromIterable臂容、concatMap科雳。
fromIterable:是指逐個發(fā)射指定的值如 List根蟹;
concatMap:concatMap操作符和flatMap是非常相似,concatMap 最終輸出的數(shù)據(jù)序列和原數(shù)據(jù)序列是一致炸渡,它是按順序鏈接Observables娜亿,而不是合并,說白了就是按順序來的蚌堵,這樣不會導致七牛云上傳的圖片順序顛倒买决。
不多說了,直接上代碼吼畏。
圖中的qiNiuFiles其實就是一個List<qiNiuFiles> qiNiuFiles = new ArrayList();? ?其中包含了你要上傳的圖片路徑督赤,key,token泻蚊。上傳之前需要你先把圖片路徑躲舌,token填進去,
然后QiniuParams 也是一個實體類性雄,里面包含的是七牛云返回的信息没卸。
然后再concatMap中的apply方法中返回一個自定義的QiNiuPathOnSubscribe。代碼如圖:
在subscribe方法中寫上傳的邏輯秒旋,上傳成功后 emitter.onNext(); 把七牛云返回數(shù)據(jù)回調(diào)出去约计,上傳失敗就onError()。
接下來再接著圖一的代碼看:
這時候在外部的onNext onError onComplete中就可以接收到七牛云返回的參數(shù)迁筛,或者錯誤信息煤蚌。
onNext中可以把你想要的參數(shù) add進自己的list中。onComplete就代表所有的圖片上傳完成了细卧,可以關閉dialog或者進度條之類的東西尉桩。
整體上大概就是這樣,有問題歡迎指正贪庙。