首先做出全局的请求队列

 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. JS生成不重复随机数

    说明 我们可以用Math.random()的方法轻松的生成 一个随机的数字,但是这个数字可能是重复的.有时候,我们需要一个不重复的随机数,可以用很多的方法来实现这个要求,以下方法是效率最高的. 解释 ...

  2. hdu 确定比赛名次

    算法:拓扑排序 题意:有一个比赛,现在知道很多队之间的关系:让你去让确定比赛排名: Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,... ...

  3. Jquery 中 $('obj').attr('checked',true)失效的几种解决方案

    转载自:搜狐博客 大拙无为 1.$('obj').prop('checked',true) 2. $(':checkbox').each(function(){ this.checked=true; ...

  4. C/C++与lua实现互调

    1,在lua脚本中调用C/C++代码中的函数 在C++中定义函数时必须以lua_State为参数, 以int为返回值才能被Lua所调用. /* typedef int (*lua_CFunction) ...

  5. iOS学习之自定义视图时,在屏幕发生旋转时触发重新布局方法

    如果要对自定义的视图在屏幕旋转时重新布局,则在自定义视图中定义以下触发方法: -(void)layoutSubviews { [super layoutSubviews]; //1.获取到屏幕旋转的方 ...

  6. [TYVJ] P1005 采药

    采药 背景 Background NOIP2005复赛普及组第三题   描述 Description 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师 ...

  7. WORD-如何解除WORD文档的锁定

    Word文档保护破解 般来说WORD文档有两种密码打开密码和文档保护密码下面介绍几种破解文档保护密码方法 方法1:插入文件法 启动WORD新建空白文档执行插入→文件打开插入文件对框定位需要解除保护文档 ...

  8. AnimateWindow

    WINDOWS提供了一个很有意思的函数:AnimateWindow.之前我想实现像MSN,QQ这些收到邮件的时候动画方式,从地下升上来的显示一个窗口,感觉很麻烦,自己去写代码,效果很不理想,今天无意中 ...

  9. bitmap 内存溢出OOM的解决办法分享

    昨天遇到这个问题就是从一个输入流里调用BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri))得到一个bit ...

  10. 【转】Android源码下载过程的一些注意事项

    原文网址:http://www.360doc.com/content/14/0113/11/11948835_344809459.shtml 其它一些事项说明: 1.在源代码下载过程中,我们在源代码下 ...