Android开发利用Volley框架下载和缓存网络图片

2024-04-04 11:38

本文主要是介绍Android开发利用Volley框架下载和缓存网络图片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      2013年Google I/O大会上推出了一种新的网络通信框架——Volley,Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。volley.jar下载

一.使用Volley框架下载网络图片

(1)首先,创建Application类,声明并且实例话RequestQueue。

App.java文件中:

public class App extends Application

{

     private static RequestQueuequeues;// Volley加载队列

     @Override

     public void onCreate()

     {

          super.onCreate();

          queues =Volley.newRequestQueue(getApplicationContext());// 实列话

     }

}

[注意]需要在AndroidManifest.xml中配置这个APP类:

<application

       android:name=".App"

       android:allowBackup="true"

       android:icon="@drawable/ic_launcher"

       android:label="@string/app_name"

       android:theme="@style/AppTheme">

...........

</application>

(2)在需要下载图片的地方,使用Volley框架进行网络操作(如ListView的Adapter中,在getView方法中可以使用)

ImageView iv = (ImageView)findViewById(R.id.iv);

String url = "http://.............../test.png"  // 图片的地址

ImageRequest request =new ImageRequest(url,new Listener<Bitmap>()

{

     @Override

     public void onResponse(Bitmap response)

     {// 加载成功,显示头像

          iv.setImageBitmap(response);

     }

},0,0,Config.RGB_565,new ErrorListener()

{

     @Override

     public void onErrorResponse(VolleyError error)

     { // 加载出错调用的函数

          iv.setImageBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.error));

     }

});

if (! url.equals(""))

{     

      App.getHttpQueue().add(request);

}

[说明]

Volley.ImageRequest(String url,Listener<Bitmap> listener, int maxWidth, int maxHeight,Config decodeConfig,ErrorListener errorListener)

url:为图片下载的地址;

listener:为下载成功的监听, 其onResponse方法中的Bitmap对象就是获得成功之后得到的图片(Bitmap response);

maxWidth与maxHeight:与系统对图片处理(压缩和拉伸),若设置为0,则系统不对图片进行这些处理;

errorListener:拉取图片出错的监听。

[注意]上面的方法,实现了数量不大,但频繁的网络加载图片的操作,可以用在ListView图片加载以及单一图片加载的过程,但是有一个缺点,比如在ListView中加载,会加载当前现实的ListView的Item的图片,上下滑动的过程中,对于显示出的Item,会重现进行网络下载,这样就浪费了流量,因此我们需要结合图片缓存机制和Volley一起进行网络图片加载使用。


二.Volley框架+BitmapCache进行网络图片加载和缓存

(1)首先,创建Application类,声明并且实例话RequestQueue。

APP.java文件中:

public class APP extends Application

{

     private static RequestQueue queues// Volley加载队列

     @Override

     public void onCreate()

     {

          super.onCreate();

          queues = Volley.newRequestQueue(getApplicationContext()); // 实列话

     }

}

[注意]需要在AndroidManifest.xml中配置这个APP类:

<application

        android:name=".App"

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

...........

</application>

(2).创建图片缓存类BitmapCache.java(借助了LruCache实现缓存)

import android.graphics.Bitmap;

import android.support.v4.util.LruCache;


import com.android.volley.toolbox.ImageLoader.ImageCache;


//用来图片缓存的类

public class BitmapCache implements ImageCache

{


     public LruCache<String,Bitmap>cache;

     public int max =10 *1024 *1024;// 设置缓存的最大为10M


     public BitmapCache()

     {

          cache =new LruCache<String,Bitmap>(max)

          {

               @Override

               protected int sizeOf(String key,Bitmap value)

               {

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

               }

          };

}


     @Override

     public Bitmap getBitmap(String url)

     {

          returncache.get(url);

     }


     @Override

     public void putBitmap(String url,Bitmap bitmap)

     {

          cache.put(url,bitmap);

     }

}


(3)调用Volley进行下载和缓存图片:

String url = "http://.........../test.png";

ImageView img = (ImageView)findViewById(R.id.img);

ImageLoader loader =new ImageLoader(App.getHttpQueue(),new BitmapCache());

ImageListener listener =ImageLoader.getImageListener(img,R.drawable.default_icon,R.drawable.error_icon);

loader.get(url, listener);


<注意>上面的操作由于需要网络支持,以及会在内存中读写内容,因此需要在AndroidManifest.xml中加入必要的操作权限:

<uses-permissionandroid:name="android.permission.INTERNET"/>

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


这篇关于Android开发利用Volley框架下载和缓存网络图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/875683

相关文章

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel