图片的本地存取(ROM)

来源:互联网 发布:阿里域名 编辑:程序博客网 时间:2024/06/05 04:50

公司里碰到个网络下载图片,保存到内存中,7天内从本地获取,7天后重新下载的要求,时间逻辑上SharePreference解决,写个图片的本地存取,留作备忘

一 首先是网络图片的加载

1,需要的权限注册

<uses-permission android:name="android.permission.INTERNET" />

2,使用的是HttpClient以Get的方式获取百度的logo图片。URL:https://www.baidu.com/img/bdlogo.png

public void getImageFromNet() {
new Thread() {
public void run() {
try {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet("https://www.baidu.com/img/bdlogo.png");
HttpResponse response = client.execute(get);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
bit_net = BitmapFactory.decodeStream(is);
myHandler.sendEmptyMessage(0);
setImageToROM();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
};
}.start();
}

网络加载,放到异步线程中,加载完成后,提示Handler加载完成可以进行相关的UI操作。setImageToROM()是将下载的图片放到内存ROM中。

二 将图片放到ROM中

1,需要注册的权限

<uses-permission android:name="android.permission.WRITE_OWNER_DATA" />

2,将Bitmap保存到 /date/date/YourPackageName/image/image_net.png 路径下,image为自己命名的文件夹,iamge_net.png为图片的文件名。

public void setImageToROM(){
try {
File imageDir = context.getDir("image", Context.MODE_PRIVATE);
String imagePath = imageDir.getAbsolutePath()+"image_net.png";
FileOutputStream out = new FileOutputStream(imagePath);
bit_net.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

使用getDir新建一个文件夹,两个参数一个文件夹名字,一个访问模式。

拼出文件的路径,使用FileOutputStream打开一个文件输出流用来保存文件到指定的路径,要记得关闭流。

compress为图片的压缩方法,三个参数,第一个format可指定文件的格式,第二个是文件的压缩质量,100表示原图片的100%,70表示原图的70%,最后一个是输出路径。

三 从ROM中读取图片

1,需要注册的权限

<uses-permission android:name="android.permission.READ_OWNER_DATA" />

2,从指定的路径中获得图片

public void getImageFromROM(){
File imageDir = context.getDir("image", Context.MODE_PRIVATE);
String imagePath = imageDir.getAbsolutePath()+"image_net.png";
bit_disk = BitmapFactory.decodeFile(imagePath);
myHandler.sendEmptyMessage(1);
}

就是BitmapFactory.decodeFile()方法,关键是拼出路径就好。

四 申明

进这行没多久,如果有错误希望大家指正,文件的读写还是不怎么理解,有什么好的例子告诉我,邮箱:zhufeng1222@qq.com,谢谢

五 项目的下载地址

http://download.csdn.net/detail/zhufeng1222/8582021

0 0