首先做出全局的请求队列

 package com.qg.lizhanqi.myvolleydemo;

 import android.app.Application;

         import com.android.volley.RequestQueue;
import com.android.volley.toolbox.HttpStack;
import com.android.volley.toolbox.Volley;
/**
* Created by lizhanqi on 2016-7-27-0027.
*/ /**
* 这是一个本应用全局的Volley请求队列,所以这里继承了Application
* 由于这是一个自定义的全局的application,所以在清单文件application中加入属性
* android:name=".MyApplication"
*/
public class MyApplication extends Application {
public static RequestQueue queues; @Override
public void onCreate() {
super.onCreate();
//实例化全局的请求队列
queues = Volley.newRequestQueue(getApplicationContext(), (HttpStack) null);
}
public static RequestQueue getHttpQueues() {
return queues;
}
}

接着做出Lru缓存图片的类

 package com.qg.lizhanqi.myvolleydemo;

 import android.graphics.Bitmap;
import android.util.LruCache; import com.android.volley.toolbox.ImageLoader; /**
* Created by lizhanqi on 2016-7-27-0027.
*/
public class BitmapCache implements ImageLoader.ImageCache {//这里实现它的主要目的是volley需要一个这样类型的缓存方式,所以是继承了它然后搭配Lru一起实现缓存
public LruCache<String,Bitmap> lruCache;
int maxMomory = 10*1024*1024;//最大内存超过10M,启动内存回收或者使用 Runtime.getRuntime().maxMemory()/4代替; public BitmapCache() {
lruCache=new LruCache<String,Bitmap>(maxMomory){// maxMomory可以使用Runtime.getRuntime().maxMemory()/4代替;
@Override
protected int sizeOf(String key, Bitmap value) { //这里应该返回的是一个图片的大小
return value.getRowBytes()*value.getHeight();//或者value.getByteCount();
}
};
}
@Override
public Bitmap getBitmap(String s) {
return lruCache.get(s);
} @Override
public void putBitmap(String s, Bitmap bitmap) {
lruCache.put(s,bitmap);
}
}

  Main使用的方式

 package com.qg.lizhanqi.myvolleydemo;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.NetworkImageView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "MainActivity";
private Button VolleyGetString;
private Button VolleyPostString;
private Button VolleyGetJsonObject;
private Button VolleyGetImage;
private Button VolleyLruCacheGetImage;
private NetworkImageView networkImageView;
private ImageView imageView;
private Button loadnetworkimageview; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imageView);
VolleyGetImage = (Button) findViewById(R.id.VolleyGetImage);
VolleyLruCacheGetImage = (Button) findViewById(R.id.VolleyLruCacheGetImage);
networkImageView = (NetworkImageView) findViewById(R.id.networkimageview);
loadnetworkimageview = (Button) findViewById(R.id.loadnetworkimageview); loadnetworkimageview.setOnClickListener(this);
VolleyGetImage.setOnClickListener(this);
VolleyLruCacheGetImage.setOnClickListener(this);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.VolleyGetImage:
volleyNormalGetImage("http://p1.qhimg.com/t0151320b1d0fc50be8.png");
break;
case R.id.VolleyLruCacheGetImage:
voleyLruCacheGetImage("http://p1.qhimg.com/t0151320b1d0fc50be8.png");
break;
case R.id.loadnetworkimageview:
voleyLoadNetWorkImage("http://p1.qhimg.com/t0151320b1d0fc50be8.png");
break;
}
} //一般的加载
private void volleyNormalGetImage(String url) {
/**
* ImageRequest(String url, Listener<Bitmap> listener, int maxWidth, int maxHeight, Config decodeConfig, ErrorListener errorListener)
* String图片请求网址
* Listener<Bitmap> 请求成功回调的监听
* int maxWidth int maxHeight对于图片压缩的大小,填写数字,如果0,代表原图大小
* Config decodeConfig 图片格式的设置
* ErrorListener errorListener 请求错误的回调
*/
ImageRequest imageRequest = new ImageRequest(url, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
imageView.setImageBitmap(bitmap);
}
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
imageRequest.setTag("volleyNormalGetImage");
MyApplication.getHttpQueues().add(imageRequest);
}
//带有缓存的加载
private void voleyLruCacheGetImage(String url) {
//(RequestQueue queue, ImageLoader.ImageCache imageCache),请求的队列,以及缓存
ImageLoader imageLoader = new ImageLoader(MyApplication.getHttpQueues(), new BitmapCache());
//getImageListener(Imageview,defaultimage,errorimage)
ImageLoader.ImageListener imageListener = imageLoader.getImageListener(imageView, R.mipmap.ic_launcher, R.mipmap.ic_launcher);
imageLoader.get(url, imageListener);
}
//volleyNetWorkImageView控件的加载
private void voleyLoadNetWorkImage(String url) {
//(RequestQueue queue, ImageLoader.ImageCache imageCache),请求的队列,以及缓存
ImageLoader imageLoader = new ImageLoader(MyApplication.getHttpQueues(), new BitmapCache());
networkImageView.setDefaultImageResId(R.mipmap.ic_launcher);
networkImageView.setErrorImageResId(R.mipmap.ic_launcher);
networkImageView.setImageUrl(url,imageLoader);
} }

//XML布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.qg.lizhanqi.myvolleydemo.MainActivity"> <Button
android:text="普通图片请求"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/VolleyGetImage"
android:layout_gravity="center_vertical" />
<Button
android:text="LRU缓存图片请求"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/VolleyLruCacheGetImage"
android:layout_gravity="center_vertical" />
<Button
android:text="加载networkimagview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/loadnetworkimageview"
android:layout_gravity="center_vertical" /> <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
android:id="@+id/imageView"
android:layout_gravity="center_vertical" />
<com.android.volley.toolbox.NetworkImageView
android:src="@mipmap/ic_launcher"
android:id="@+id/networkimageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </LinearLayout>

volley三种基本请求图片的方式与Lru的基本使用:正常的加载+含有Lru缓存的加载+Volley控件networkImageview的使用的更多相关文章

  1. javascript 中数组的创建 添加 与将数组转换成字符串 页面三种提交请求的方式

    创建js数组 var array=new Array(); Java中创建数组 private String[] array=new String[3]; 两个完全不同的,js中是可变长度的 添加内容 ...

  2. ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式

    由于ASP.NET Core应用是一个同时处理多个请求的服务器应用,所以在处理某个请求过程中抛出的异常并不会导致整个应用的终止.出于安全方面的考量,为了避免敏感信息的外泄,客户端在默认的情况下并不会得 ...

  3. Android中三种超实用的滑屏方式汇总(转载)

    Android中三种超实用的滑屏方式汇总   现如今主流的Android应用中,都少不了左右滑动滚屏这项功能,(貌似现在好多人使用智能机都习惯性的有事没事的左右滑屏,也不知道在干什么...嘿嘿),由于 ...

  4. HttpClient 三种 Http Basic Authentication 认证方式,你了解了吗?

    Http Basic 简介 HTTP 提供一个用于权限控制和认证的通用框架.最常用的 HTTP 认证方案是 HTTP Basic authentication.Http Basic 认证是一种用来允许 ...

  5. Js之Dom学习-三种获取页面元素的方式、事件、innerText和innerHTML的异同

    一.三种获取页面元素的方式: getElementById:通过id来获取 <body> <input type="text" value="请输入一个 ...

  6. .NET提供了三种后台输出js的方式:

    .NET提供了三种后台输出js的方式: 首先创建 js文件testjs.js {    Page.ClientScript.RegisterClientScriptInclude("keys ...

  7. Hive中的三种不同的数据导出方式介绍

    问题导读:1.导出本地文件系统和hdfs文件系统区别是什么?2.带有local命令是指导出本地还是hdfs文件系统?3.hive中,使用的insert与传统数据库insert的区别是什么?4.导出数据 ...

  8. Android三种实现自定义ProgressBar的方式介绍

    一.通过动画实现 定义res/anim/loading.xml如下: View Row Code<?xml version="1.0" encoding="UTF- ...

  9. Haproxy的三种保持客户端会话保持方式

    2017-03-25 15:41:41   haproxy 三种保持客户端Seesion; 一.源地址hash(用户IP识别) haroxy 将用户IP经过hash计算后 指定到固定的真实服务器上(类 ...

随机推荐

  1. sealed 修饰符

    当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承. 在下面的示例中,类 B 从类 A 继承,但是任何类都不能从类 B 继承. class A {} sealed class B ...

  2. Java中书写要注意的地方

    Java的命名规则:以字母.下划线(_)或$符号开头,其后跟任意数目的字母.数字.下划线和$符号.  注意: 数字不能作为标识符的开头: 除了下划线与$符号以外,其余的符号不能使用: 不能使用关键字作 ...

  3. Objective-C 字典、可变字典

    字典相当于c++ stl中的map 字典NSDictionary #import <UIKit/UIKit.h> #import "AppDelegate.h" int ...

  4. Private Members in JavaScript

    Private Members in JavaScript Douglas Crockford www.crockford.com JavaScript is the world's most mis ...

  5. 一个很简单的jQuery插件实例教程(菜鸟级)

    很多公司的前端设计开发人员都是女孩子,而这些女孩子很多JavaScript技能都不是很好.而前端开发过程中,JavaScript技能又是必不可少的.所以,如果前端小MM正在为某个JavaScript效 ...

  6. Small factorials Solved Problem code: FCTRL2

    import sys def fact(n): final = n while n > 1: final *= n - 1 n -= 1 return final #逻辑严谨,不要忘了retur ...

  7. 启动安卓模拟器报错 emulator: ERROR: x86_64 emulation currently requires hardware acceleration! CPU acceleration status:HAXM must be updated(version 1.1.1<6.0.1) 解决办法

    启动安卓模拟器报错 emulator: ERROR: x86_64 emulation currently requires hardware acceleration!  CPU accelerat ...

  8. Python 的开发环境

    建议在Windows 下开发,成本低廉,简单,效率高. 综合下:开发的程序,Python  Django (Mysql,PostgreSQL) Nginx Redis ,这一组组合可以适应不同的平台, ...

  9. 六款主流免费网络嗅探软件wireshark,tcpdump,dsniff,Ettercap,NetStumbler

    1.WireShark WireShark是一个开源免费的高性能网络协议分析软件,它的前身就是非常著名的网络分析软 件Ethereal.你可以使用它来解决网络疑难问题,进行网络协议分析,以及作为软件或 ...

  10. 域控制器安全策略在哪里 Windows server 2008

    Start(开始)–Programs(程序)–Administrative Tools(管理工具)–Group Policy Management(策略管理器) 展开组策略管理器选择–Forest(林 ...