Android加载网络图片
2016-06-12 18:54
489 查看
简单总结一下Android加载网络图片的几种方式。
第一种:使用Picasso、Fresco等图片加载框架,如下是使用Picasso加载的例子:
//Picasso加载位图
Picasso.with(this)
.load(TUPIANURL)
.resize(320,160)
.centerCrop()
// .placeholder() //提前显示的图片
// .error() //错误情况下显示的图片
.rotate(180) //旋转
.into(imageView);
第二种:开启线程进行异步网络图片加载:
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(TUPIANURL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
if (connection.getResponseCode() == 200) {
InputStream in = connection.getInputStream();
//流-->Bitmap
final Bitmap bitmap = BitmapFactory.decodeStream(in);
runOnUiThread(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(bitmap);
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
然而,这样做没有考虑缓存问题,解决的办法是在第一次下载网络图片后,通过图片的URL生成MD5字节码得到文件名,将图片和文件名保存在本地缓存或磁盘中,然后在下次需要图片数据时直接从缓存或磁盘中读取。
根据URL生成MD5的方法:
/**
* 根据URL生成MD5码的方法
* @throws FileNotFoundException
* @throws NoSuchAlgorithmException
*/
private String getMD5(String url) {
String md5 = "";
//磁盘缓存
// /data/data/app_name/files
try {
OutputStream out = openFileOutput("file_name",MODE_PRIVATE);
//获得缓存目录
// /data/data/app_name/cache
File path = getCacheDir();
File name = new File(path,"file_name");
//文件名字怎么起
//使用文件生成散列码或者用图片链接地址生成散列码
//使用Url生成散列码,当需要查找一个Url文件或图片时,可以先遍历磁盘上的散列码集合数组,然后有的话直接从磁盘读,没有则执行网络请求
MessageDigest md = MessageDigest.getInstance(""); //获得一个数字摘要实例
//生成图片Url的MD5值(SHA1散列)
byte[] result = md.digest(url.getBytes()); //对字节数组产生数字摘要,MD5产生的结果
BigInteger b = new BigInteger(result);
md5 = b.toString(16);
} catch (Exception e) {
e.printStackTrace();
}
return md5;
}
留坑待填
第一种:使用Picasso、Fresco等图片加载框架,如下是使用Picasso加载的例子:
//Picasso加载位图
Picasso.with(this)
.load(TUPIANURL)
.resize(320,160)
.centerCrop()
// .placeholder() //提前显示的图片
// .error() //错误情况下显示的图片
.rotate(180) //旋转
.into(imageView);
第二种:开启线程进行异步网络图片加载:
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(TUPIANURL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
if (connection.getResponseCode() == 200) {
InputStream in = connection.getInputStream();
//流-->Bitmap
final Bitmap bitmap = BitmapFactory.decodeStream(in);
runOnUiThread(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(bitmap);
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
然而,这样做没有考虑缓存问题,解决的办法是在第一次下载网络图片后,通过图片的URL生成MD5字节码得到文件名,将图片和文件名保存在本地缓存或磁盘中,然后在下次需要图片数据时直接从缓存或磁盘中读取。
根据URL生成MD5的方法:
/**
* 根据URL生成MD5码的方法
* @throws FileNotFoundException
* @throws NoSuchAlgorithmException
*/
private String getMD5(String url) {
String md5 = "";
//磁盘缓存
// /data/data/app_name/files
try {
OutputStream out = openFileOutput("file_name",MODE_PRIVATE);
//获得缓存目录
// /data/data/app_name/cache
File path = getCacheDir();
File name = new File(path,"file_name");
//文件名字怎么起
//使用文件生成散列码或者用图片链接地址生成散列码
//使用Url生成散列码,当需要查找一个Url文件或图片时,可以先遍历磁盘上的散列码集合数组,然后有的话直接从磁盘读,没有则执行网络请求
MessageDigest md = MessageDigest.getInstance(""); //获得一个数字摘要实例
//生成图片Url的MD5值(SHA1散列)
byte[] result = md.digest(url.getBytes()); //对字节数组产生数字摘要,MD5产生的结果
BigInteger b = new BigInteger(result);
md5 = b.toString(16);
} catch (Exception e) {
e.printStackTrace();
}
return md5;
}
留坑待填
相关文章推荐
- asp MD5加密方式使用建议
- C语言压缩文件和用MD5算法校验文件完整性的实例教程
- 浅谈C#中Md5和Sha1两种加密方式
- 基于C#对用户密码使用MD5加密与解密
- Linux系统递归生成目录中文件的md5的方法
- 在C#中生成与PHP一样的MD5 Hash Code的方法
- asp.net实现md5加密
- Java Web开发之MD5加密用法分析
- C#计算字符串哈希值(MD5、SHA)的方法小结
- php 的加密函数 md5,crypt,base64_encode 等使用介绍
- PHP中MD5函数使用实例代码
- php md5下16位和32位的实现代码
- jquery插件开发之实现md5插件
- Java实现MD5加密的方法
- C#计算文件MD5校验的方法
- javascript实现base64 md5 sha1 密码加密
- 分享JavaScript与Java中MD5使用两个例子
- javascript客户端生成MD5值的函数代码
- 深入浅析Android手机卫士保存密码时进行md5加密
- c++实现MD5算法实现代码