您的位置:首页 > 理论基础 > 计算机网络

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;
}

留坑待填
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息