Android利用Volley框架加载网络图片

Volley框架是在Google I/O 2013上Volley发布的,目的是使Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。我们也简单了解下Volley引入的背景,在Volley出现以前,我们可能面临如下的问题,比如要在ListView或是GridView中加载数量较多的图片时:先在ListAdapter#getView()里开始图像的读取,再通过AsyncTask等机制使用HttpURLConnection从服务器去的图片资源,然后在AsyncTask#onPostExecute()里设置相应ImageView的属性。这样下来不仅仅步骤繁琐,而且不考虑周全的话,还可能出现OOM等问题。现在有了Volley后我们只需要一个函数即可实网络图片的加载。简单地讲Volley功能有:

  • JSON,图像等的异步加载;
  • 网络请求的排序;
  • 网络请求的优先级处理;
  • 图片缓存;
  • 多级别取消请求;
  • 和Activity生命周期的联动(Activity结束时同时取消所有网络请求)等。                                                                                                               今天先简单贴下用Volley加载网络图片,下次有时间再贴下用Volley实现http请求及json数据加载。用Volley加载网络图片常用有两种方式,一种是用ImageLoader,另外是用Volley封装好的图片控件NetworkImageView:
  • 第一种方式步骤:
  • 创建一个RequestQueue对象,就一句话:RequestQueue mQueue = Volley.newRequestQueue(context);
  • 创建一个ImageLoader对象,ImageLoader
    mImageLoader= new ImageLoader(mRequestQueue, new BitmapLruCache(cacheSize));       public class BitmapLruCache extends LruCache<String, Bitmap> implements ImageLoader.ImageCache {

    public BitmapLruCache(int maxSize) {

    super(maxSize);

    }

    protected int sizeOf(String key, Bitmap bitmap) {

    return (bitmap.getRowBytes() * bitmap.getHeight());

    }

    public Bitmap getBitmap(String url) {

    return ((Bitmap) get(url));

    }

    public void putBitmap(String url, Bitmap bitmap) {

    put(url, bitmap);

    }

    }***创建ImageLoader中的参数cacheSize就是我们设置的缓存文件最大值,比如可以设置int cacheSize= 10 * 1024 * 1024;

  • 创建ImageListener listener = ImageLoader.getImageListener(imageView,R.drawable.default_image,
    R.drawable.failed_image);//imageView参数就是我们要展示图片的控件
  • 然后就可以加载图片了:imageLoader.get("http://www.xxxxxxx.jpg", listener);//传入图片url及上面创建的listener就可OK.
  • 第二种方式,就是利用Volley封装好的NetworkImageView加载图片。
  • 这种方式更简单,把NetworkImageView当成我们平时用的ImageView放到我们要加载图片的布局xml中,在对应的代码中用NetworkImageView
    imageView=findViewById();找到控件,
  • networkImageView.setDefaultImageResId(R.drawable.default_icon);//加载中显示的图片

    networkImageView.setErrorImageResId(R.drawable.failed_icon);//加载失败时显示的图片

    networkImageView.setImageUrl("http://xxxxxxx.jpeg",imageLoader);//目标图片的URL地址(第一个参数用于指定图片的URL地址,第二个参数则是上面创建好的ImageLoader对象)。

时间: 2024-10-19 13:45:01

Android利用Volley框架加载网络图片的相关文章

Android利用Volley异步加载数据完整详细示例(二)

MainActivity如下: package cc.y; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.os.Bundle; import android.util.LruCache; import android.widget.ImageView;

Android利用Volley异步加载数据(JSON和图片)完整示例

Android利用Volley异步加载数据(JSON和图片)完整示例 MainActivity.java package cc.testvolley; import org.json.JSONObject; import android.app.Activity; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.os.Bundle; import android.support.v

Android利用Volley异步加载数据完整详细示例(一)

MainActivity如下: package cc.cn; import java.util.HashMap; import org.json.JSONObject; import android.app.Activity; import android.content.Context; import android.os.Bundle; import com.android.volley.AuthFailureError; import com.android.volley.RequestQ

Android之ListView异步加载网络图片(优化缓存机制)【转】

网上关于这个方面的文章也不少,基本的思路是线程+缓存来解决.下面提出一些优化: 1.采用线程池 2.内存缓存+文件缓存 3.内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制只能使用最大JVM内存的1/4 4.对下载的图片进行按比例缩放,以减少内存的消耗 具体的代码里面说明.先放上内存缓存类的代码MemoryCache.java: public class MemoryCache { private static final String TAG = "MemoryCa

Android使用开源框架加载图片

Android开发时,有时候需要们来加载网络图片,我们可以通过api的方式进行加载,但是前几天做的时候,发现了一个优秀的开源框架,可以帮助我们非常简单便捷的进行图片的加载,所以记录一下. 我所用的是: android-smart-image-view 在github上的地址是:https://github.com/loopj/android-smart-image-view,我们可以直接进行搜索,github对于我们程序员来说简直是宝库啊,一定要能够擅长应用. 下载下来后,我们把其目录下的src

Andorid Volley框架加载图片OOM问题分析

一.Volley框架简介 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,Google 在2013年的I/O大会 上,发布了Volley.Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮. Volley提供了JsonObjectRequest.JsonArrayRequestStringRequest等Request形式

[android]完美解决ListView加载网络图片乱跳问题

为什么 先说一下为什么会出现图片乱跳. 使用convertView对ListView的每个item优化,item的复用可以有效降低内存的占用,使ListView滑动更为流畅.但会带来一个问题,当最顶部的item滑出屏幕时,会变成下一个从底部将要滑进来的item.每次滑进来的item都要去请求网络获得图片. 第一个item滑出去时,是带着图片的.其ImageView指向了一块内存.当其慢慢滑出,从底部慢慢滑进时,底部的item与顶部(只有一半在屏幕里能看到了)的还是指向 同一块内存.加载的了同一张

Android之ListView异步加载网络图片(优化缓存机制)

网上关于这个方面的文章也不少,基本的思路是线程+缓存来解决.下面提出一些优化: 1.采用线程池 2.内存缓存+文件缓存 3.内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制只能使用最大JVM内存的1/4 4.对下载的图片进行按比例缩放,以减少内存的消耗 具体的代码里面说明.先放上内存缓存类的代码MemoryCache.java: [java] view plain copy public class MemoryCache { private static final

Android Volley入门到精通:使用Volley加载网络图片

在上一篇文章中,我们了解了Volley到底是什么,以及它的基本用法.本篇文章中我们即将学习关于Volley更加高级的用法,如何你还没有看过我的上一篇文章的话,建议先去阅读Android Volley完全解析(一),初识Volley的基本用法. 在上篇文章中有提到过,Volley是将AsyncHttpClient和Universal-Image-Loader的优点集成于一身的一个框架.我们都知道,Universal-Image-Loader具备非常强大的加载网络图片的功能,而使用Volley,我们