使用RxJava和Glide保存图片

 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("图片保存失败!");
                }
            }
        });
    }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值