Volley 简单使用
2015-12-06 16:22
295 查看
git仓库:https://github.com/mcxiaoke/android-volley
一、配置
在build.gradle文件中加:
二、前期准备
1、在AndroidManifest.xml文件中加权限:
2、重写Application:(详情看代码)
图片缓冲
三、Get和Post方法
无非就是几种Request:StringRequest、JsonObjectRequest、JsonArrayRequest、ImageRequest、自定义Request,选好某个Request后,就可以将该request加入到请求队列中,就算完成了一个网络请求。
1、StringRequest的应用
StringRequest如果要添加请求参数就加上getParams()方法,如果要添加请求头就加上getHeaders()方法;反之,删除。如下:
StringRequest的第一个参数决定请求的方法(Get或Post)
第二参数是URL
第三个参数是请求成功后返回的结果
第四个参数是请求失败后的错误信息
2、JsonRequest:JsonObjectRequest和JsonArrayRequest是JsonRequest的直接子类
类似StringRequest的用法,只是参数不同
3、ImageRequest:
类似StringRequest,如下:
参数:第三、四个参数代表图片的最大宽、高,如果图片大于该宽、高,就要压缩,如果是0,就表示不做任何处理,图片多大,就显示多大;第五个参数是图片质量。
`
一、配置
在build.gradle文件中加:
compile 'com.mcxiaoke.volley:library:1.0.17'
二、前期准备
1、在AndroidManifest.xml文件中加权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
2、重写Application:(详情看代码)
package com.example.yvan.netall; import android.app.Application; import android.text.TextUtils; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.Volley; /** * Created by Administrator on 2015/12/6. */ public class MyApplication extends Application { //默认TAG public static final String TAG = MyApplication.class.getSimpleName(); //请求队列(一般一个app一个请求队列就可以了) private RequestQueue mRequestQueue; //图片加载器(一般一个app一个图片加载器就可以了) private ImageLoader mImageLoader; private static MyApplication appInstance; @Override public void onCreate() { super.onCreate(); appInstance = this; } /** * 单例模式 得到MyApplication的对象 * * @return */ public static synchronized MyApplication getAppInstance() { return appInstance; } /** * 得到请求队列 * 一个app使用一个请求队列就可以了(一般情况下) * * @return */ public RequestQueue getmRequestQueue() { if (mRequestQueue == null) { mRequestQueue = Volley.newRequestQueue(getApplicationContext()); } return mRequestQueue; } /** * 获取ImageLoader(图片加载器) * * @return */ public ImageLoader getmImageLoader() { //保证mRequestQueue不是空的 if (mRequestQueue == null) { mRequestQueue = Volley.newRequestQueue(getApplicationContext()); } //LruBitmapCache()下文有解释 if (mImageLoader == null) { mImageLoader = new ImageLoader(mRequestQueue, new LruBitmapCache()); } return mImageLoader; } /** * 将请求request加入请求队列,并给该请求设置标志tag * * @param request * @param tag * @param <T> */ public <T> void addToRequestQueue(Request<T> request, String tag) { //给request设置标志tag,如果tag为空,就设置成默认的TAG request.setTag(TextUtils.isEmpty(tag) ? TAG : tag); getmRequestQueue().add(request); } /** * 将请求request加入请求队列,并给该请求设置默认的TAG * * @param request * @param <T> */ public <T> void addToRequestQueue(Request<T> request) { request.setTag(TAG); getmRequestQueue().add(request); } /** * 取消等待中的请求 * * @param tag 根据tag取消对应的请求 */ public void cancelPendingRequest(String tag) { if (mRequestQueue != null) { //取消所有标志为tag的请求 mRequestQueue.cancelAll(tag); } } }
图片缓冲
package com.example.yvan.netall; import android.graphics.Bitmap; import android.util.LruCache; import com.android.volley.toolbox.ImageLoader; /** * 图片缓冲 LruCache * Created by Administrator on 2015/12/6. */ public class LruBitmapCache extends LruCache<String, Bitmap> implements ImageLoader.ImageCache { public LruBitmapCache(int maxSize) { super(maxSize); } public LruBitmapCache() { this(getDefaultLruCacheSize()); } /** * 获取默认的图片缓冲大小 * * @return */ public static int getDefaultLruCacheSize() { final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); final int lruCacheSize = maxMemory / 8; return lruCacheSize; } @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight() / 1024; } /** * 从缓冲中得到图片 * @param url * @return */ @Override public Bitmap getBitmap(String url) { return get(url); } /** * 缓冲图片 * @param url * @param bitmap */ @Override public void putBitmap(String url, Bitmap bitmap) { put(url, bitmap); } }
三、Get和Post方法
无非就是几种Request:StringRequest、JsonObjectRequest、JsonArrayRequest、ImageRequest、自定义Request,选好某个Request后,就可以将该request加入到请求队列中,就算完成了一个网络请求。
1、StringRequest的应用
StringRequest如果要添加请求参数就加上getParams()方法,如果要添加请求头就加上getHeaders()方法;反之,删除。如下:
StringRequest的第一个参数决定请求的方法(Get或Post)
第二参数是URL
第三个参数是请求成功后返回的结果
第四个参数是请求失败后的错误信息
/** * StringRequest的应用 */ StringRequest stringRequest = new StringRequest(com.android.volley.Request.Method.GET, url, new com.android.volley.Response.Listener<String>() { @Override public void onResponse(String response) { //在UI线程中 Log.e(TAG,"Vollye数据:"+response.toString()); } }, new com.android.volley.Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { //在UI线程中 VolleyLog.d(TAG,"Error:"+error.getMessage()); } }){ //如果是Post或者Get方法有请求参数,可以在此方法中添加,如果没有请求参数,就删除此方法 @Override protected Map<String, String> getParams() throws AuthFailureError { //添加自己的请求参数 Map<String,String> paramsMap = new HashMap<>(); return paramsMap; } //这是添加Http的头文件,如果不需要添加头文件,就删除此方法 @Override public Map<String, String> getHeaders() throws AuthFailureError { //添加自己的头文件 Map<String,String> headersMap = new HashMap<>(); return headersMap; } }; //这个就是调用Application中的方法,添加到请求队列中,完成网络请求,这是在新的线程中运行的 MyApplication.getAppInstance().addToRequestQueue(stringRequest);
2、JsonRequest:JsonObjectRequest和JsonArrayRequest是JsonRequest的直接子类
类似StringRequest的用法,只是参数不同
/** * JsonObjectRequest的应用 */ String tag = "json_obj_req"; JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(com.android.volley.Request.Method.GET, url, "", new com.android.volley.Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { long tid = Thread.currentThread().getId(); Log.e(TAG, "volley线程id:" + tid); Log.e(TAG, "volley返回的数据:" + response.toString()); } }, new com.android.volley.Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.e(TAG, "Error:" + error.getMessage()); } } ); MyApplication.getAppInstance().addToRequestQueue(jsonObjectRequest, tag);
3、ImageRequest:
类似StringRequest,如下:
参数:第三、四个参数代表图片的最大宽、高,如果图片大于该宽、高,就要压缩,如果是0,就表示不做任何处理,图片多大,就显示多大;第五个参数是图片质量。
/** * 下载图片并加载 * @param url * @param imageView */ public static void downloadSetBitmap(String url, final ImageView imageView){ ImageRequest imageRequest = new ImageRequest(url, new com.android.volley.Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { imageView.setImageBitmap(response); } }, 0, 0, Bitmap.Config.RGB_565, new com.android.volley.Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { //如果下载出错,设置默认图片 imageView.setImageResource(R.mipmap.ic_launcher); Log.e(TAG,"下载图片出错:"+error.getMessage()); } }); MyApplication.getAppInstance().addToRequestQueue(imageRequest); }
`
相关文章推荐
- 兄弟郊游问题
- Hadoop格式化HDFS报错
- Method Swizzling
- 七种网卡绑定模式详解
- javaScript基础练习题-下拉框制作(CSS)
- 信息安全系统设计基础第十三周学习总结
- LightOJ 1043 - Triangle Partitioning (简单数学)
- 重排n^2宫问题
- C++入门(1)简单变量和数据类型
- mongodb数据库
- 独木舟上的旅行
- 图像滤镜艺术---乐高像素拼图特效
- 完美解决 Linux 下 Sublime Text 3中文输入
- c标签 if else c标签 总结
- iOS 下如何设置全局字体?
- 鸡兔同笼
- 中华英才网为什么没落了?
- 解决Tomcat: Can't load IA 32-bit .dll on a AMD 64-bit platform问题
- 反汇编工具 objdump的使用简介
- fastdfs学习笔记之安装