RxJava的基本框架
Observable.create(new ObservableOnSubscribe<Boolean>() {
@Override
public void subscribe(ObservableEmitter<Boolean> e) throws Exception {
//TODO 处理下载图片的操作
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean result) throws Exception {
//TODO 处理结果
}
});
ObserveOn和SubscribeOn这两个是用来做线程的切换
Glide 本身提供了一个简洁的方法 downloadOnly 提供下载 ,返回一个FutureTarget接口来处理结果
具体图片处理代码:
FutureTarget<File> futureTarget = Glide.with(EditDataImageActivity.this).load(imgUrl)
.downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);
File fileImg = futureTarget.get();
不过这里有个问题,下载不到图片资源的时候,比如说404,这里就需要处理一下异常否则会报错
全部代码:
private void saveImg(final String imgUrl) {
Observable.create(new ObservableOnSubscribe<Boolean>() {
@Override
public void subscribe(ObservableEmitter<Boolean> e) throws Exception {
FutureTarget<File> futureTarget = Glide.with(EditDataImageActivity.this).load(imgUrl)
.downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);
try{
File fileImg = futureTarget.get();
String imgDirUrl = SDCardUtils.getSDCardPath() + File.separator + YlMApplication.getInstance().getPackageName() + File.separator + "images";
File imgDir = new File(imgDirUrl);
if (!imgDir.exists()) {
imgDir.mkdirs();
}
String imgName = System.currentTimeMillis() + imgUrl.substring(imgUrl.lastIndexOf("."), imgUrl.length());
File destFile = new File(imgDir, imgName);
//复制图片到自己自定义的位置
boolean result = FileUtils.copyFile(fileImg, destFile);
e.onNext(result);
}catch (Exception e1){
e.onNext(false);
}
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean result) throws Exception {
if (result) {
ToastUtils.show("图片保存成功!");
} else {
ToastUtils.show("图片保存失败!");
}
}
});
}