转载自: 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. jQuery视差滚动插件,(附原理分析,调用方法)

    演示地址:http://www.jq22.com/jquery-info1799 jquery插件,使用验证过可用. 分析源代码后总结原理:设置background样式为fixed,判断浏览器滚动距离 ...

  2. 数据库基础和JDBC

    一SQL查询 练习: 1.在grade表中查找80-90分的学生学号和分数 select studentid 学号,score 分数 form grade where socre between 80 ...

  3. 转:asp.net TreeView CheckChanged 事件浅谈

    http://blog.csdn.net/xiage/article/details/5128755 在开发中经常可以碰到类似的问题: 想通过一个树父节点的TreeNodeCheckChanged 事 ...

  4. React学习笔记-1-什么是react,react环境搭建以及第一个react实例

    什么是react?react的官方网站:https://facebook.github.io/react/下图这个就是就是react的标志,非常巧合的是他和我们的github的编辑器Atom非常相似. ...

  5. Error:identifer “blockIdx” and __syncthreads() undefined

    #include "device_launch_parameters.h" for blockIdx #include "device_functions.h" ...

  6. Linux搭建JDK、Tomcat安装及配置

    一.JDK安装及配置 1.JKD下载地址:http://pan.baidu.com/s/1i5NpImx 2.查看安装: rpm -qa | grep jdk 3.卸载:rpm -e --nodeps ...

  7. 【Java EE 学习 48】【Hibernate学习第五天】【抓取策略】【二级缓存】【HQL】

    一.抓取策略. 1.hibernate中提供了三种抓取策略. (1)连接抓取(Join Fetch):这种抓取方式是默认的抓取方式.使用这种抓取方式hibernate会在select中内连接的方式获取 ...

  8. android:ellipsize的使用(转)

    EidtText和textview中内容过长的话自动换行,使用android:ellipsize与android:singleine可以解决,使只有一行. EditText不支持marquee 用法如 ...

  9. 简述抽象和封装,对你学习Java有一些作用

    作为一个Java 初学者,对Java的理解可能有些片面,甚至有些错误的理解,对于观看此处的您,希望您选择性观看!!! 天知道我为什么选择学习编程,我不爱编程,但是我既然学习了,还是会努力学习的,在此分 ...

  10. Hadoop学习笔记(2) 关于MapReduce

    1. 查找历年最高的温度. MapReduce任务过程被分为两个处理阶段:map阶段和reduce阶段.每个阶段都以键/值对作为输入和输出,并由程序员选择它们的类型.程序员还需具体定义两个函数:map ...