Android-okhttp下载图片并保存(刷新图库)

原创 2017年05月05日 15:32:23

注意:下载和保存在子线程中进行。

//注意:下载和保存在子线程中进行。
        new Thread(new Runnable() {
            @Override
            public void run() {
                final Bitmap bitmap = getPic(url);//下载

                onSaveBitmap(bitmap, MainActivity.this);//保存到本地

                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        iv4.setImageBitmap(bitmap);//显示图片
                    }
                });
            }
        }).start();

okhttp下载的方法:

 public Bitmap getPic(String url) {
        //获取okHttp对象get请求
        try {
            OkHttpClient client = new OkHttpClient();
            //获取请求对象
            Request request = new Request.Builder().url(url).build();
            //获取响应体
            ResponseBody body = client.newCall(request).execute().body();
            //获取流
            InputStream in = body.byteStream();
            //转化为bitmap
            Bitmap bitmap = BitmapFactory.decodeStream(in);

            return bitmap;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

保存的方法:

 /*
    Android保存图片到系统图库:http://blog.csdn.net/xu_fu/article/details/39158747
    * */
    private void onSaveBitmap(final Bitmap mBitmap, final Context context) {
        // 第一步:首先保存图片
        //将Bitmap保存图片到指定的路径/sdcard/Boohee/下,文件名以当前系统时间命名,但是这种方法保存的图片没有加入到系统图库中
        File appDir = new File(Environment.getExternalStorageDirectory(), "Boohee");

        if (!appDir.exists()) {
            appDir.mkdir();
        }

        String fileName = System.currentTimeMillis() + ".jpg";
        File file = new File(appDir, fileName);

        try {
            FileOutputStream fos = new FileOutputStream(file);
            mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.flush();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 第二步:其次把文件插入到系统图库
        try {
            MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), fileName, null);
//   /storage/emulated/0/Boohee/1493711988333.jpg
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        // 第三步:最后通知图库更新
        context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file)));
        //context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
    }

okhttp简单的封装(支持异步)后进行下载并显示图片:

工具类:

 class HttpUtil {
        private OkHttpClient client;

        public void getImage(String url, Callback callback) {
            //单例模式
            if (client == null) {
                client = new OkHttpClient();
            } else {
                Request request = new Request.Builder().url(url).build();
                //enqueue为OkHttp提供的异步方法
                client.newCall(request).enqueue(callback);
            }
        }
    }
 new HttpUtil().getImage(url, new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {

            }

            @Override
            public void onResponse(com.squareup.okhttp.Response response) throws IOException {
                byte[] bytes = response.body().bytes();
                final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
//                InputStream inputStream = response.body().byteStream();
//                Bitmap bitmap1 = BitmapFactory.decodeStream(inputStream);
                handler.post(new Runnable() {//主线程更新UI
                    @Override
                    public void run() {
                        iv6.setImageBitmap(bitmap);
                    }
                });
            }
        });
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_31057219/article/details/71212233

实战COM(03)----创建一个进程外组件

 本文欢迎转载,唯请注明出处及作者 blackcolor@263.net---------------------------------------------------             ...
  • blackcolor
  • blackcolor
  • 2001-07-24 15:14:00
  • 1453

Android下载网络图片资源

从网络下载图片资源在各种APP中很常见,比如很多APP都有广告轮番功能,这些广告图片通常是从服务器获取的,这里就需要从服务器上下载图片资源并显示。...
  • fancheng614
  • fancheng614
  • 2017-08-27 09:11:48
  • 1086

Android实现下载图片并保存到SD卡中

在文件里设置一个点击方法已进行点击下载: download.setOnClickListener(new View.OnClickListener() { @Override pub...
  • Android_yyx
  • Android_yyx
  • 2017-06-09 14:21:45
  • 2443

android 从服务器下载图片,并保存到本地

例子:     从服务器获取图片路径,从中取得其中的两条数据,进行下载。 先创建一个实体类,保存图片的数据: public class PictureSet { public int...
  • liuye066
  • liuye066
  • 2016-12-01 09:49:47
  • 2661

Android使用OkHttp框架下载网络图片

一、OkHttp简介OkHttp是一款优秀的HTTP框架,它支持get请求和post请求,支持基于Http的文件上传和下载,支持加载图片,支持下载文件透明的GZIP压缩,支持响应缓存避免重复的网络请求...
  • wei_zhi
  • wei_zhi
  • 2016-11-04 11:42:38
  • 7442

android ftp 客户端 实现下载文件和图片

  • 2012年11月17日 17:19
  • 733KB
  • 下载

Android图片下载缓存框架 Android-Universal-Image-Loader 五分钟快速搭建

Android图片下载缓存框架 Android-Universal-Image-Loader 五分钟快速搭建
  • shirakawakanaki
  • shirakawakanaki
  • 2016-10-24 10:53:42
  • 1103

Android 强大的图片加载类 图库效果

  • 2014年08月11日 00:40
  • 1.43MB
  • 下载

Android 下载网络图片保存到本地

Android 下载网络图片保存到本地
  • u011340932
  • u011340932
  • 2014-08-25 13:17:23
  • 12703

android网络下载大量图片

  • 2013年05月16日 16:58
  • 3.12MB
  • 下载
收藏助手
不良信息举报
您举报文章:Android-okhttp下载图片并保存(刷新图库)
举报原因:
原因补充:

(最多只允许输入30个字)