转载自: 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. 5.openstack之mitaka搭建计算节点

    部署计算节点(compute服务) 一:控制节点配置 1.建库建用户 CREATE DATABASE nova_api; CREATE DATABASE nova; GRANT ALL PRIVILE ...

  2. 基于Z-WAVE 协议的LED智能照明系统的研究笔记

    LED调光基础: ☆:LED照明调光控制信号的方式有两种: 1. 通过PWM信号控制LED灯具开关电源的占空比从而实现调光: 2. 通过调光控制信号和交流电源供电线合用的两线式或三线式(例如LED相控 ...

  3. <%#Eval if判断用法

    1.绑定Repeater 基础用法 <%#Eval("RoleID")%> 2.简单判断用法 <td> <%# Convert.ToBoolean(E ...

  4. (2016弱校联盟十一专场10.3) A.Best Matched Pair

    题目链接 #include<cstdio> #include<cstring> #include<algorithm> #include<stack> ...

  5. 【XLL 框架库函数】 TempErr/TempErr12

    创建一个包含了 Excel 工作表错误的临时 XLOPER/XLOPER12 原型 LPXLOPER TempErr(WORD err); LPXLOPER12 TempErr12(BOOL err) ...

  6. C语言中do...while(0)的妙用(转载)

    转载来自:C语言中do...while(0)的妙用,感谢分享. 在linux内核代码中,经常看到do...while(0)的宏,do...while(0)有很多作用,下面举出几个: 1.避免goto语 ...

  7. WPF中Ribbon控件的使用

    这篇博客将分享如何在WPF程序中使用Ribbon控件.Ribbon可以很大的提高软件的便捷性. 上面截图使Outlook 2010的界面,在Home标签页中,将所属的Menu都平铺的布局,非常容易的可 ...

  8. OpenCv全景图像拼接

    http://my.oschina.net/xiaot99/blog/226589 http://blog.csdn.net/chenjiazhou12/article/details/2282548 ...

  9. suse最小化安装

    Open suse 图形安装 用虚拟机vmware70 或者是Oracle VM VirtualBox安装 .镜像文件就是SLED-10-x86_64-DVD1 根据虚拟机设置吧镜像文件装入虚拟机中 ...

  10. js动态加载以及确定加载完成的代码

    利用原生js动态加载js文件到页面,并在确定加载完成后调用相关function var otherJScipt = document.createElement("script") ...