公司里碰到个网络下载图片,保存到内存中,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.youkuaiyun.com/detail/zhufeng1222/8582021