Android网络上获取图片的三种方法
2015-09-18 23:23
549 查看
android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况。对于这种情况,一般的方法就是耗时操作用线程来实现。下面列三种获取url图片的方法:
1.直接获取:(容易:ANR,不建议)
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201509/ce717edd7e6eaa62d66b58d14745f8ad.png)
mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;
Drawable drawable = loadImageFromNetwork(IMAGE_URL);
mImageView.setImageDrawable(drawable) ;
公用方法:
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201509/ce717edd7e6eaa62d66b58d14745f8ad.png)
private Drawable loadImageFromNetwork(String imageUrl)
{
Drawable drawable = null;
try {
// 可以在这里通过文件名来判断,是否本地有此图片
drawable = Drawable.createFromStream(
new URL(imageUrl).openStream(), "image.jpg");
} catch (IOException e) {
Log.d("test", e.getMessage());
}
if (drawable == null) {
Log.d("test", "null drawable");
} else {
Log.d("test", "not null drawable");
}
return drawable ;
}
2. 后台线程获取url图片:
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201509/ce717edd7e6eaa62d66b58d14745f8ad.png)
mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;
new Thread(new Runnable(){
Drawable drawable = loadImageFromNetwork(IMAGE_URL);
@Override
public void run() {
// post() 特别关键,就是到UI主线程去更新图片
mImageView.post(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
mImageView.setImageDrawable(drawable) ;
}}) ;
}
}).start() ;
3.AsyncTask获取url图片
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201509/ce717edd7e6eaa62d66b58d14745f8ad.png)
mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;
new DownloadImageTask().execute(IMAGE_URL) ;
private class DownloadImageTask extends AsyncTask<String, Void, Drawable>
{
protected Drawable doInBackground(String... urls) {
return loadImageFromNetwork(urls[0]);
}
protected void onPostExecute(Drawable result) {
mImageView.setImageDrawable(result);
}
}
比较三种方法,感觉代码简洁方面用第三方法不错。
1.直接获取:(容易:ANR,不建议)
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201509/ce717edd7e6eaa62d66b58d14745f8ad.png)
mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;
Drawable drawable = loadImageFromNetwork(IMAGE_URL);
mImageView.setImageDrawable(drawable) ;
公用方法:
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201509/ce717edd7e6eaa62d66b58d14745f8ad.png)
private Drawable loadImageFromNetwork(String imageUrl)
{
Drawable drawable = null;
try {
// 可以在这里通过文件名来判断,是否本地有此图片
drawable = Drawable.createFromStream(
new URL(imageUrl).openStream(), "image.jpg");
} catch (IOException e) {
Log.d("test", e.getMessage());
}
if (drawable == null) {
Log.d("test", "null drawable");
} else {
Log.d("test", "not null drawable");
}
return drawable ;
}
2. 后台线程获取url图片:
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201509/ce717edd7e6eaa62d66b58d14745f8ad.png)
mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;
new Thread(new Runnable(){
Drawable drawable = loadImageFromNetwork(IMAGE_URL);
@Override
public void run() {
// post() 特别关键,就是到UI主线程去更新图片
mImageView.post(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
mImageView.setImageDrawable(drawable) ;
}}) ;
}
}).start() ;
3.AsyncTask获取url图片
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201509/ce717edd7e6eaa62d66b58d14745f8ad.png)
mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;
new DownloadImageTask().execute(IMAGE_URL) ;
private class DownloadImageTask extends AsyncTask<String, Void, Drawable>
{
protected Drawable doInBackground(String... urls) {
return loadImageFromNetwork(urls[0]);
}
protected void onPostExecute(Drawable result) {
mImageView.setImageDrawable(result);
}
}
比较三种方法,感觉代码简洁方面用第三方法不错。
相关文章推荐
- HDU_3998_Sequence(最长上升子序列 + 网络流)
- 网络扫描常用命令
- RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- 把网络请求得到的字符串转成字典
- Tcp/ip三次握手,4次分手.
- SqlServer问题:sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connectio
- 漫步云中网络
- HttpServletResponse输出的中文乱码
- python网络爬虫
- http content-type
- VMware的三种网络连接方式
- http 的get,put,post,delete
- Http的Cache机制
- TCP/IP协议原理与应用笔记05:TCP/IP协议下的网关
- 网络图可视化工具
- 网络配置
- linux下C语言socket网络编程简例
- TCP/IP协议原理与应用笔记04:子网掩码
- 我的WebUtil工具类--获取IP与发送http请求
- 长春网络赛 1108