学了这么久,最近有空把自己用到过的网络加载图片的方式总结了出来,与大家共享,希望对你们有帮助。

此博客包含Android 5种基本的加载网络图片方式,包括普通加载HttpURLConnection、HttpClients、Volley、XUtils、OkHttp等网络加载图片。

其他网络图片加载方式,后续补上。

效果如下图:

HttpURLConnection方式:

public Bitmap getImageBitmap(String url) {
URL imgUrl = null;
Bitmap bitmap = null;
try {
imgUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) imgUrl
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}

HttpClient方式

public Bitmap getImageBitmap(String url) {
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
try {
HttpResponse resp = httpclient.execute(httpget);
// 判断是否正确执行
if (HttpStatus.SC_OK == resp.getStatusLine().getStatusCode()) {
// 将返回内容转换为bitmap
HttpEntity entity = resp.getEntity();
InputStream in = entity.getContent();
Bitmap mBitmap = BitmapFactory.decodeStream(in);
// 向handler发送消息,执行显示图片操作
return mBitmap;
} } catch (Exception e) {
} finally {
httpclient.getConnectionManager().shutdown();
} return null;
}

XUtils方式

private void initView() {
// TODO Auto-generated method stub
BitmapUtils bitmapUtils = new BitmapUtils(this);
// 加载网络图片
bitmapUtils.display(imageView,
"http://img.my.csdn.net/uploads/201407/26/1406383290_9329.jpg"); // 加载本地图片(路径以/开头, 绝对路径)
// bitmapUtils.display(imageView, "/sdcard/test.jpg"); // 加载assets中的图片(路径以assets开头)
// bitmapUtils.display(imageView, "assets/img/wallpaper.jpg"); }

OkHttp方式

  private void setIamge()
{
String url = "http://img.my.csdn.net/uploads/201407/26/1406383291_8239.jpg";
OkHttpUtils.get().url(url).tag(this)
.build()
.connTimeOut(20000).readTimeOut(20000).writeTimeOut(20000)
.execute(new BitmapCallback() {
@Override
public void onError(Call call, Exception e, int id) {
} @Override
public void onResponse(Bitmap bitmap, int id) {
imageView.setImageBitmap(bitmap);
}
});
}

Volley方式

 /***
* ImageRequest加载图片
*/
public void setImg1()
{ ImageRequest request = new ImageRequest(VolleySingleton.imageThumbUrls[0],
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
imageview1.setImageBitmap(bitmap);
}
}, 0, 0, Config.RGB_565,
new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) {
imageview1.setImageResource(R.mipmap.ic_launcher);
}
});
VolleySingleton.getVolleySingleton(this.getApplicationContext()).addToRequestQueue(request);
}
/***
* 使用 ImageLoader 加载图片
*/ public void setImg2()
{
com.android.volley.toolbox.ImageLoader mImageLoader;
mImageLoader = VolleySingleton.getVolleySingleton(this.getApplicationContext()).getImageLoader();
mImageLoader.get(VolleySingleton.imageThumbUrls[1],
//mImageView是ImageView实例
//第2个参数:默认图片
//第2个参数:加载图片错误时的图片
com.android.volley.toolbox.ImageLoader.getImageListener(imageview2,R.mipmap.ic_launcher, R.mipmap.ic_launcher));
}
/**
* 使用NetworkImageView加载图片
*/
public void setImg3()
{
com.android.volley.toolbox.ImageLoader mImageLoader;
mImageLoader = VolleySingleton.getVolleySingleton(this.getApplicationContext()).getImageLoader();
networkImageView.setImageUrl(VolleySingleton.imageThumbUrls[2], mImageLoader);
}

相关Jar下载:Volley.Jar  XUtils.Jar httpclient-4.3.5.jarokhttp.jar

结语:

这五种网络图片加载是基本的,了解会使用就行了;

其他网络图片加载方式,请看

Android之网络图片框架UniversalImageLoader和结合LruCache缓存图片

Android图片加载框架之Picasso非常好的图片加载缓存库

Android之Fresco(facebook的强大Android图片加载的框架)

Android之Glide(非常好用的图片加载框架)

源码点击下载 :https://github.com/DickyQie/android-load-picture/tree/imageloading

 

Android之网络图片加载的5种基本方式的更多相关文章

  1. android ImageView网络图片加载、动态设置尺寸、圆角..

    封装了一个关于ImageView的辅助类,该类可以方便实现网络图片下载的同时,动态设置图片尺寸.圆角.....一系列连贯的操作,无样式表,java代码实现所有功能,使用很方便. package com ...

  2. android 开发 - 网络图片加载库 Fresco 的使用。

    概述 Fresco 是 facebook 的开源类库,它支持更有效的加载网络图片以及资源图片.它自带三级缓存功能,让图片显示更高效. 介绍 Fresco 是一个强大的图片加载组件. Fresco 中设 ...

  3. Android 异步网络图片加载

    ListView异步加载图片 http://www.eoeandroid.com/forum.php?mod=viewthread&tid=161586 [Android分享] ListVie ...

  4. Android批量图片加载经典系列——采用二级缓存、异步加载网络图片

    一.问题描述 Android应用中经常涉及从网络中加载大量图片,为提升加载速度和效率,减少网络流量都会采用二级缓存和异步加载机制,所谓二级缓存就是通过先从内存中获取.再从文件中获取,最后才会访问网络. ...

  5. [Android] Android ViewPager 中加载 Fragment的两种方式 方式(二)

    接上文: https://www.cnblogs.com/wukong1688/p/10693338.html Android ViewPager 中加载 Fragmenet的两种方式 方式(一) 二 ...

  6. [Android] Android ViewPager 中加载 Fragment的两种方式 方式(一)

    Android ViewPager 中加载 Fragmenet的两种方式 一.当fragment里面的内容较少时,直接 使用fragment xml布局文件填充 文件总数 布局文件:view_one. ...

  7. 55、Android网络图片 加载缓存处理库的使用

         先来一个普通的加载图片的方法. import android.annotation.SuppressLint; import android.app.Activity; import and ...

  8. Android 高清加载巨图方案 拒绝压缩图片

    Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49300989: 本文出自:[张 ...

  9. Android 图片异步加载的体会,SoftReference已经不再适用

      在网络上搜索Android图片异步加载的相关文章,目前大部分提到的解决方案,都是采用Map<String, SoftReference<Drawable>>  这样软引用的 ...

随机推荐

  1. .NET中将中文符号转换成英文符号

    public static string ConvertToEn(string text) { const string s1 = ".:,?!.“”‘’"; const stri ...

  2. Pandas介绍

    pandas是python非常好用的一个数据结构包,包含有许多数据操作的方法,能够让你快速简便的提取和保存数据,节省你在这块的数据流操作耗时,从而让你更加专注于逻辑的设计和算法的设计.很多算法的相关库 ...

  3. 2.5 – Garbage Collection 自动垃圾回收 Stop-the-world vs. incremental vs. concurrent 垃圾回收策略

    2.5 – Garbage Collection  自动垃圾回收 Lua 5.3 Reference Manual http://www.lua.org/manual/5.3/manual.html# ...

  4. FW:stash install

    先下载破解安装包.http://pan.baidu.com/s/1mgumBbE 我的安装环境. 说明下,经过我的测试. 如果系统内存低于 512M, 就不要折腾了,非常卡. 推荐 2048M 内存. ...

  5. 三种空格unicode(\u00A0,\u0020,\u3000)表示的区别

    1.不间断空格\u00A0,主要用在office中,让一个单词在结尾处不会换行显示,快捷键ctrl+shift+space ; 2.半角空格(英文符号)\u0020,代码中常用的; 3.全角空格(中文 ...

  6. Puppet学习:Augeas的怪问题

    今天测试部署Zabbix,本来以前是正常的,今天莫名其妙报错.测试后发现是Augeas出现问题,无论如何都不执行.于是采用调试模式: puppet agent --test --verbose --d ...

  7. 百度领跑BAT all in O2O机遇大于挑战

        近期一年O2O可谓是互联网领域最"炙手可热"的话题,似乎是个创业项目都要和O2O沾点关系.所以我们看到各种细分O2O模式层出不穷,并且,似乎外卖.洗车.租房等传统服务已经通 ...

  8. android:layout_gravity 和 android:gravity

    android:layout_gravity和 android:gravity的区别,android:gravity是对元素本身说的,元素本身的文本显示在什么地方靠着 换个属性设置,不过不设置默认是在 ...

  9. java爬取网页内容 简单例子(2)——附jsoup的select用法详解

    [背景] 在上一篇博文java爬取网页内容 简单例子(1)——使用正则表达式 里面,介绍了如何使用正则表达式去解析网页的内容,虽然该正则表达式比较通用,但繁琐,代码量多,现实中想要想出一条简单的正则表 ...

  10. EF Code First学习笔记:数据库创建(转)

    控制数据库的位置 默认情况下,数据库是创建在localhost\SQLEXPRESS服务器上,并且默认的数据库名为命名空间+context类名,例如我们前面的BreakAway.BreakAwayCo ...