Android-RxJava2.x+Glide图片下载案例
2019-08-25 本文已影响5人
MonkeyLei
直接上代码:
import android.content.Context;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.Target;
import java.io.File;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
/**
* Created by hl on 2018/3/16.
*/
/**
* Rxjava版本+Glide下载图片服务(后面改造为Presenter结构)
*/
public class RxLoadGlidePic {
private Context context;
public RxLoadGlidePic(Context _context) {
this.context = _context;
}
/**
* 执行请求方法
*/
public void execute(Class _dataModelclass, String imgUrl, String srcId, final int count) {
Observable.create(new ObservableOnSubscribe<File>() {
@Override
public void subscribe(ObservableEmitter<File> emitter) throws Exception {
emitter.onNext(Glide
.with(context)
.downloadOnly()
.load(imgUrl)
.submit(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
.get());
}
}).subscribeOn(Schedulers.io()) // 上游是io池子线程
.observeOn(Schedulers.io()) // 处理也是子线程
.map(new Function<File, String>() {
@Override
public String apply(File file) throws Exception {
if (null == file) {
return null;
}
/**
* 重新拼接图片名称,因为glide加密了文件名,然后拷贝一份文件即可!
*/
String flexStr = "jpg";
if (imgUrl.contains("png") || imgUrl.contains("PNG")) {
flexStr = "png";
}
if (imgUrl.contains("jpeg") || imgUrl.contains("JPEG")) {
flexStr = "jpeg";
}
if (imgUrl.contains("gif") || imgUrl.contains("GIF")) {
flexStr = "gif";
}
if (imgUrl.contains("webp") || imgUrl.contains("WEBP")) {
flexStr = "webp";
}
String pngName = file.getAbsolutePath().
substring(0, file.getAbsolutePath().lastIndexOf(".") + 1) +
flexStr;
///< 拷贝一个文件
// if (FileHelperUtil.copyFileIfNotExsit(file.getAbsolutePath(), pngName)) {
// return pngName;
// }
return null;
}
})
.observeOn(AndroidSchedulers.mainThread()) // 结果切到UI线程
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String src) {
// 加载成功了,获取下载的本地图片路径src
}
@Override
public void onError(Throwable e) {
// "加载图片失败!"
}
@Override
public void onComplete() {
}
});
}
}
其中这个地方自己搞个工具类拷贝下就行: 如果图片本身不需要格式,后缀处理,能直接支持加载,也可以直接用。。
image这样就可以了。。之前小萌新记录了一版RxJava1.x的,目前用法不一样了。。但是思路差不多...