10min实现一个简易图片查看器(图片缓存)

来源:互联网 发布:香草的天空知乎 编辑:程序博客网 时间:2024/06/05 01:05

在昨天简易图片查看器的基础上,我们进一步完善Demo,实现图片缓存功能。


通过httpURLConnection.getInputStream()获取网络请求得到的输入流:

                     <span style="white-space:pre"></span>   InputStream inputStream = httpURLConnection.getInputStream();

我们在CacheDir新建一个cache.png,用于缓存图片:

                            File file = new File(getCacheDir(),"cache.png");

接下来通过文件流向文件里写数据(图片):

                            FileOutputStream fileOutputStream = new FileOutputStream(file);                            int len = -1;                            byte[] buffer = new byte[1024];                            while ((len = inputStream.read(buffer) )!= -1){                                fileOutputStream.write(buffer,0,len);                            }                            fileOutputStream.close();                            inputStream.close();

通过BitmapFactory将文件解析成图片:

                            Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());

然后和之前类似,通过Handler发送消息:

                            Message message = Message.obtain();//消息池                            message.obj = bitmap;                            mHandler.sendMessage(message);

这是第一次请求网络图片,第二次时我们就可以直接使用缓存,不用访问网络:

先判断一下缓存文件是否有数据:

                           if(file.exists() && file.length() > 0){

如果有的话直接使用,BitmapFactory解析,Handler发送消息:
                            Bitmap cacheBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());                            Message message = Message.obtain();//消息池                            message.obj = cacheBitmap;                            mHandler.sendMessage(message);

完整源代码如下:

                    if(code == 200){                        InputStream inputStream = httpURLConnection.getInputStream();                        //缓存图片                        File file = new File(getCacheDir(),"cache.png");                        if(file.exists() && file.length() > 0){                            Bitmap cacheBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());                            Message message = Message.obtain();//消息池                            message.obj = cacheBitmap;                            mHandler.sendMessage(message);                        }else{                            FileOutputStream fileOutputStream = new FileOutputStream(file);                            int len = -1;                            byte[] buffer = new byte[1024];                            while ((len = inputStream.read(buffer) )!= -1){                                fileOutputStream.write(buffer,0,len);                            }                            fileOutputStream.close();                            inputStream.close();                            Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());                            //Bitmap bitmap = BitmapFactory.decodeStream(inputStream);                            Message message = Message.obtain();//消息池                            message.obj = bitmap;                            mHandler.sendMessage(message);                        }                    }


0 0
原创粉丝点击