开源项目Meizhi学习笔记--保存图片到本地
来源:互联网 发布:eagle软件 编辑:程序博客网 时间:2024/05/18 18:02
public class RxMeizhi { public static Observable<Uri> saveImageAndGetPathObservable(Context context, String url, String title) { //使用RxJava,因为后面涉及请求网络和耗时操作 return Observable.create(new Observable.OnSubscribe<Bitmap>() {//发出Bitmap @Override public void call(Subscriber<? super Bitmap> subscriber) { Bitmap bitmap = null; try { //通过Picasso把图片保存下来 bitmap = Picasso.with(context).load(url).get(); } catch (IOException e) { //如果出错,把错误抛出给订阅者 subscriber.onError(e); } if (bitmap == null) { subscriber.onError(new Exception("无法下载到图片")); } //发出bitmap subscriber.onNext(bitmap); //发出完成 subscriber.onCompleted(); } //进行转换,将Bitmap转为Uri }).flatMap(new Func1<Bitmap, Observable<? extends Uri>>() { @Override public Observable<? extends Uri> call(Bitmap bitmap) { File appDir = new File(Environment.getExternalStorageDirectory(), "Meizhi"); if (!appDir.exists()) { appDir.mkdir(); } String fileName = title.replace('/', '-') + ".jpg"; File file = new File(appDir, fileName); try { FileOutputStream outputStream = new FileOutputStream(file); assert bitmap != null; bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); outputStream.flush(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } Uri uri = Uri.fromFile(file); // 通知图库更新 Intent scannerIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri); context.sendBroadcast(scannerIntent); return Observable.just(uri); } //上面的操作将在io线程进行 }).subscribeOn(Schedulers.io()); }}
private void saveImageToGallery() { // @formatter:off Subscription s = RxMeizhi.saveImageAndGetPathObservable(this, mImageUrl, mImageTitle) .observeOn(AndroidSchedulers.mainThread())//切换线程,之后的操作将在主线程 .subscribe(new Action1<Uri>() { @Override public void call(Uri uri) { File appDir = new File(Environment.getExternalStorageDirectory(), "Meizhi"); String msg = String.format(PictureActivity.this.getString(R.string.picture_has_save_to), appDir.getAbsolutePath()); Toasts.showShort(msg); } }, new Action1<Throwable>() { @Override public void call(Throwable error) { Toasts.showLong(error.getMessage() + "\n再试试..."); } }); // @formatter:on //用于取消请求 addSubscription(s); }
0 0
- 开源项目Meizhi学习笔记--保存图片到本地
- 开源项目Meizhi学习笔记--RatioImageView
- 开源项目Meizhi学习笔记
- 开源项目Meizhi学习笔记--VideoImageView
- 开源项目Meizhi学习笔记--工具类的收集
- 开源项目MeiZhi源码阅读
- c#学习笔记(二):保存图片、保存DataGridView数据到本地和从本地读取到DataGridView
- 保存图片到本地
- 图片保存到本地
- 图片保存到本地
- 保存图片到本地
- 图片保存到本地
- Android学习笔记进阶18之画图并保存图片到本地
- Android学习笔记进阶18之画图并保存图片到本地
- Android学习笔记进阶18之画图并保存图片到本地
- AIR保存图片到本地
- 保存远程图片到本地
- 保存网络图片到本地
- Vuex 模块化与项目实例 (2.0)
- HDU1728 逃离迷宫
- php 发出get与post请求
- 打开摄像头
- mac80211解析二
- 开源项目Meizhi学习笔记--保存图片到本地
- AndroidStudio Gradle的基本使用
- Webpack构建基本的React+ES6项目 --- 图片的路径与打包
- 在当前页面嵌入新的页面
- php传输html乱码解决
- 多文件目录下makefile文件递归执行编译所有c文件
- Android 自定义View,自定义属性(带进度的圆形进度条)
- 倒三角形
- photoshop第四章:图片的处理