转载自: 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. Spring @AspectJ 实现AOP 入门例子(转)

    AOP的作用这里就不再作说明了,下面开始讲解一个很简单的入门级例子. 引用一个猴子偷桃,守护者守护果园抓住猴子的小情节. 1.猴子偷桃类(普通类): package com.samter.common ...

  2. swift 001

    swift 001  = 赋值是没有返回值的 所以 int a=10; int b=20; if(a=b){ printf("这个是错误的"); } swift  中的模运算 是支 ...

  3. SQL操作记录查看工具

    [1]SQL Server Profiler就是一个Sql的监视工具,可以具体到每一行Sql语句,每一次操作,和每一次的连接 [2] 做数据交互时,往往很难直观的看到最后在数据库中执行的SQL语句.此 ...

  4. vim 使用

    vim有三种模式:输入模式,命令模式,底行模式,使用esc进入命令模式,在命令模式下按英文的冒号,进入底行模式:命令行模式下按i进入输入模式.vim编辑文件是将文件内容复制到缓冲区显示在屏幕上. vi ...

  5. myeclipse6.5注册机

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public ...

  6. IOS7开发~Xcode5制作framework

    一.Framework 简介(Introduction to Framework Programming Guide) Mac OS X 扩展了 framework 的功能,让我们能够利用它来共享代码 ...

  7. linq 的switch实现

    List<RemindSend> lrs = (from a in db.Remind join b in db.Certified on a.certifiedId equals b.C ...

  8. ping命令执行过程详解

    [TOC] ping命令执行过程详解 机器A ping 机器B 同一网段 ping通知系统建立一个固定格式的ICMP请求数据包 ICMP协议打包这个数据包和机器B的IP地址转交给IP协议层(一组后台运 ...

  9. 跟随Rodolfo进入VR时代!

    大家好,我是Rodolfo!一个热衷于Virtual Reality (VR),Operating System,Flushbonading和Algorithm的IT行业CTO. 基于多年的自我喜好研 ...

  10. 圣诞老人去哪?Power BI告诉你

    随着圣诞节的来临,微软的Power BI团队使用Power BI来回答大家一直以来所关心的问题:圣诞老人去哪? 要回答这个问题,来自社交网络的数据是最合适不过的了.于是Power BI团队用以下关键字 ...