//从数据库里取出数据源 PicBean 包括本地路径、网络路径等字段
List<PicBean> picList = DBManager.getInstance(context).queryPicList(billcode);
int[] count = {0};//计数器
Observable.from(picList)
.flatMap(new Func1<PicBean, Observable<PicBean>>() {
@Override
public Observable<PicBean> call(PicBean picBean) {
return getPicObservable(picBean);
}})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<PicBean>() {
@Override
public void call(PicBean picBean) {
count[0]++;
if (count[0]==picList.size()){
Log.i("qwe", "上传完毕");
}
}});
private Observable<PicBean> getPicObservable(final PicBean picBean) {
return Observable.create((Observable.OnSubscribe<PicBean>) subscriber ->
//下面7牛上传图片的工具类 可替换自己的上传方法
QiNiuUpLoadUtils.upLoad(picBean.getBaseFileName(), getImageKey(picBean),
new QiNiuUpLoadUtils.onUploadListener() {
@Override
public void onSuccess(String path) {
picBean.setNetFileName(path);
subscriber.onNext(picBean);
subscriber.onCompleted();
}
@Override
public void onFailed(String error) {
subscriber.onError(new Throwable(error));
}
}))
// .observeOn(Schedulers.newThread()) //如果用concatMap 可以考虑多线程
.subscribeOn(Schedulers.io());
}