转载自: http://doinone.iteye.com/blog/1074283

Android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况。对于这种情况,一般的方法就是耗时操作用线程来实现。下面列三种获取url图片的方法: 
1.直接获取:(容易:ANR,不建议)

[java] view plain copy
  1. mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;
  2. Drawable drawable = loadImageFromNetwork(IMAGE_URL);
  3. mImageView.setImageDrawable(drawable) ;

公用方法: 

[java] view plain copy
  1. private Drawable loadImageFromNetwork(String imageUrl)
  2. {
  3. Drawable drawable = null;
  4. try {
  5. // 可以在这里通过文件名来判断,是否本地有此图片
  6. drawable = Drawable.createFromStream(
  7. new URL(imageUrl).openStream(), "image.jpg");
  8. } catch (IOException e) {
  9. Log.d("test", e.getMessage());
  10. }
  11. if (drawable == null) {
  12. Log.d("test", "null drawable");
  13. } else {
  14. Log.d("test", "not null drawable");
  15. }
  16. return drawable ;
  17. }

2. 后台线程获取url图片: 

[java] view plain copy
  1. mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;
  2. new Thread(new Runnable(){
  3. Drawable drawable = loadImageFromNetwork(IMAGE_URL);
  4. @Override
  5. public void run() {
  6. // post() 特别关键,就是到UI主线程去更新图片
  7. mImageView.post(new Runnable(){
  8. @Override
  9. public void run() {
  10. // TODO Auto-generated method stub
  11. mImageView.setImageDrawable(drawable) ;
  12. }}) ;
  13. }
  14. }).start()  ;

3.AsyncTask获取url图片

[java] view plain copy
  1. mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;
  2. new DownloadImageTask().execute(IMAGE_URL) ;
  3. private class DownloadImageTask extends AsyncTask<String, Void, Drawable>
  4. {
  5. protected Drawable doInBackground(String... urls) {
  6. return loadImageFromNetwork(urls[0]);
  7. }
  8. protected void onPostExecute(Drawable result) {
  9. mImageView.setImageDrawable(result);
  10. }
  11. }

URL转Drawable之 Android中获取网络图片的三种方法的更多相关文章

  1. Android中传递对象的三种方法

    Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! Android中,Activity和Fragment之间传递对象,可以通过将对象序列化并存入Bundle或者I ...

  2. android中解析文件的三种方式

    android中解析文件的三种方式     好久没有动手写点东西了,最近在研究android的相关技术,现在就android中解析文件的三种方式做以下总结.其主要有:SAX(Simple API fo ...

  3. PHP中获取星期的几种方法

    PHP中获取星期的几种方法   PHP星期几获取代码: 1 date(l); 2 //data就可以获取英文的星期比如Sunday 3 date(w); 4 //这个可以获取数字星期比如123,注意0 ...

  4. Android中全屏 取消标题栏,TabHost中设置NoTitleBar的三种方法(转)

    Android中全屏 取消标题栏,TabHost中设置NoTitleBar的三种方法http://www.cnblogs.com/zdz8207/archive/2013/02/27/android- ...

  5. 体温数据上传程序开发+获取时间的三种方法+DB Browser下载及安装

    今天开始了体温上传程序的开发 今日所学: 获取时间 (21条消息) (转)安卓获取时间的三种方法_sharpeha的博客-CSDN博客_安卓获取时间 DB Browser安装教程 (20条消息) sq ...

  6. mysql 中添加索引的三种方法

    原文:http://www.andyqian.com/2016/04/06/database/mysqleindex/ 在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以 ...

  7. jQuery中detach&&remove&&empty三种方法的区别

    jQuery中empty&&remove&&detach三种方法的区别 empty():移除指定元素内部的所有内容,但不包括它本身 remove():移除指定元素内部的 ...

  8. android 自定义控件中获取属性的三种方式(转)

    第一种方法,直接设置属性值,通过attrs.getAttributeResourceValue拿到这个属性值. (1)在xml文件中设置属性值 <com.example.activity.Ico ...

  9. Android下获取FPS的几种方法

    FPS(Frames Per Second)是关乎Android用户体验最为重要的指标之一,而在VR中更是如此.为了评估VR系统.VR SDK及Unity应用的性能,通常会实时获取FPS并将其显示出来 ...

随机推荐

  1. destoon公司搜索页面显示公司类型

    首先找到前台模板文件:/template/default/company/search.htm 看到51行 {template 'list-company', 'tag'} 打开 /template/ ...

  2. espcms联动筛选功能开发

    易思后台增加新内容模型,添加字段yewu,fuwu,leixing 修改/interface/article.php (写上新增内容模型的mid——写死的),对这个模型的内容列表写了可以联动筛选的sq ...

  3. 在react native用到的javascript 的一些关键知识(整理中)

    发现了一个讲解javascript的好网站,分享一下,讲的非常棒! 注意,这些文章都可以选择中文进行阅读! 下面这个连接是关于prototype的: https://developer.mozilla ...

  4. jquery this 和 event.target 区别

    1.this和event.target的区别: js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的目标DOM元素: 2.this和event.t ...

  5. 朴素贝叶斯算法的python实现

    朴素贝叶斯 算法优缺点 优点:在数据较少的情况下依然有效,可以处理多类别问题 缺点:对输入数据的准备方式敏感 适用数据类型:标称型数据 算法思想: 朴素贝叶斯比如我们想判断一个邮件是不是垃圾邮件,那么 ...

  6. python中read、readline、readlines的区别

    read直接读入整个文件,存成一个字符串变量 readline一行一行读入文件,所以说读取的文件可以大于内存,但是读取的速度很慢 readlines一次读取整个文件,存成一个列表,所以说也必须小于内存 ...

  7. [Linux]在linux中,常常用到ctrl和其他按键组合,常用的有哪些及意义呢

    在linux中,常常用到ctrl和其他按键组合,常用的有哪些及意义呢? Ctrl+c 结束正在运行的程序 Ctrl+d 结束输入或退出shell Ctrl+s 暂停屏幕输出[锁住终端] Ctrl+q ...

  8. 微软的R语言发行版本MRO及开发工具RTVS

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:微软在收购R语言的开发商后,也独立发行或在自己的产品中集成了R语言,这里就介绍下它们包 ...

  9. mysql数据库引擎

    看某个使用的引擎,在显示结果里参数engine后面的就表示该表当前用的存储引擎:mysql> show create table 表名; 看mysql支持哪些存储引擎:mysql> sho ...

  10. JAVA Day8

    1. 引用数据类型需要new 2. 字符串使用的3种方式 String s = "hello world"; String s = new String(); String s = ...