Android Volley网络请求框架
来源:互联网 发布:手机淘宝2015旧版5.7.2 编辑:程序博客网 时间:2024/05/09 12:48
虽然不是原创,但此文纯手写,喜欢请关注。个人学习笔记,请不要见笑。通过学习郭霖大神的http://blog.csdn.net/guolin_blog/article/details/17482095
加上自己的理解。
volley 下载:http://download.csdn.net/detail/sinyu890807/7152015
在清单文件中添加权限:
- <uses-permission android:name="android.permission.INTERNET" />
volley使用起来先要s声明RequestQueue,注意这里拿到的RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。
- RequestQueue mQueue = Volley.newRequestQueue(context);
1、StringRequest的用法(get请求)/** * 用StringRequest去请求 * 第一步创建request对象, * cnew listener成功时返回, * new Errolistener失败是返回。 * 把创建好的放进 实例化好的RequestQueue mQueue; */ public void init() {// 可以看到,这里new出了一个StringRequest对象,// StringRequest的构造函数需要传入三个参数,// 第一个参数就是目标服务器的URL地址,第二个参数是服务器响应成功的回调,// 第三个参数是服务器响应失败的回调. 然后在响应成功的回调里打印出服务器返回的内容,在响应失败的回调里打印出失败的详细信息。 StringRequest stringRequest = new StringRequest(URL, new Response.Listener<String>() { @Override public void onResponse(String response) {
//这里是我自己封装的一个log方法。 Tool.show(Volley1.this, response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Tool.show(Volley1.this, error.toString() + "=====" + error); } });// 把StringRequet放到已经创建好的mQUeue mQueue.add(stringRequest); }
2、StringRequest的用法(post请求)
/** * 用StringRequest带参请求 * 第一步创建request对象, * cnew listener成功时返回, * new Errolistener失败是返回。 * {这里面写一个请求参数} * 把创建好的放进 实例化好的RequestQueue mQueue; */ public void init1() { StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() { @Override public void onResponse(String s) { Tool.show(Volley1.this, s.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Tool.show(Volley1.this, volleyError.toString() + "=====" + volleyError); } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String, String> map = new HashMap<String, String>(); map.put("pno", "2"); return map; } }; mQueue.add(stringRequest); }
3、JsonRequest的用法
/** * JsonRequest请求方式 * 第一步创建request对象, * cnew listener成功时返回, * new Errolistener失败是返回。 * 把创建好的放进 实例化好的RequestQueue mQueue; */ public void init2() { JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(URL, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Tool.show(Volley1.this, response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Tool.show(Volley1.this, error.toString() + "========" + error); } }); mQueue.add(jsonObjectRequest); }
4、 ImageRequest的用法
/** * ImageRequest请求网络图片 * 第一个参数图片网址 * 第二个参数请求成功的回调 * 第三第四个参数分别用于指定允许图片最大的宽度和高度, * 如果指定的网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩, * 指定成0的话就表示不管图片有多大,都不会进行压缩 * 第五个参数用于指定图片的颜色属性,Bitmap.Config下的几个常量都可以在这里使用 * 其中ARGB_8888可以展示最好的颜色属性, * 每个图片像素占据4个字节的大小,而RGB_565则表示每个图片像素占据2个字节大小。 * 第六个参数是图片请求失败的回调,这里我们当请求失败时在ImageView中显示一张默认图片。 */ public void init3() { ImageRequest imageRequest = new ImageRequest( IMG, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { img.setImageBitmap(response); } }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { img.setImageResource(R.mipmap.img1); } }); mQueue.add(imageRequest); }
5、 ImageLoader的用法
/** * ImageLoader请求网络 * ImageLoader的构造函数接收两个参数,第一个参数就是RequestQueue对象, * 第二个参数是一个ImageCache对象,这里我们先new出一个空的ImageCache的实现即可。 * 我们通过调用ImageLoader的getImageListener() * 方法能够获取到一个ImageListener对象,getImageListener()方法接收三个参数, * 第一个参数指定用于显示图片的ImageView控件, * 第二个参数指定加载图片的过程中显示的图片, * 第三个参数指定加载图片失败的情况下显示的图片。 * 调用ImageLoader的get()方法来加载图片 */ public void init4() {
//这里是自己写好了一个缓存的接口,所以注释掉了 ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());// ImageLoader imageLoader1 = new ImageLoader(mQueue, new ImageLoader.ImageCache() {// @Override// public Bitmap getBitmap(String s) {// return null;// }//// @Override// public void putBitmap(String s, Bitmap bitmap) {//// }// }); ImageLoader.ImageListener listener = ImageLoader.getImageListener(img, R.mipmap.img2, R.mipmap.img2); imageLoader.get(IMG, listener); }缓存的接口
public class BitmapCache implements ImageLoader.ImageCache { private LruCache<String, Bitmap> mCache; public BitmapCache() { int maxSize = 10 * 1024 * 1024; mCache = new LruCache<String, Bitmap>(maxSize) { @Override protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getRowBytes() * bitmap.getHeight(); } }; } @Override public Bitmap getBitmap(String url) { return mCache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { mCache.put(url, bitmap); }}
NetworkImageView的用法
1、先写一个它自带的xml控件。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Send Request" /> <com.android.volley.toolbox.NetworkImageView android:id="@+id/network_image_view" android:layout_width="200dp" android:layout_height="200dp" android:layout_gravity="center_horizontal" /> </LinearLayout>
2在布局中反射这个控件
这是NetworkImageView这个类型的,千万不要写错
network_img = (NetworkImageView) findViewById(R.id.network_img);3代码实现
/** * Volley还提供了第三种方式来加载网络图片,即使用NetworkImageView * NetworkImageView是一个自定义控制,它是继承自ImageView的,具备ImageView控件的所有功能,并且在原生的基础之上加入了加载网络图片的功能。 * NetworkImageView控件的用法要比前两种方式更加简单 * 1. 创建一个RequestQueue对象。 * 2. 创建一个ImageLoader对象。 * 3. 在布局文件中添加一个NetworkImageView控件。 * 4. 在代码中获取该控件的实例。 * 5. 设置要加载的图片地址。 * <p> * setDefaultImageResId()方法、setErrorImageResId()方法和setImageUrl() * 方法来分别设置加载中显示的图片,加载失败时显示的图片,以及目标图片的URL地址 * 其中,setImageUrl()方法接收两个参数,第一个参数用于指定图片的URL地址,第二个参数则是前面创建好的ImageLoader对象。 * 压缩过程是在内部完全自动化的,并不需要我们关心, */ public void init5() { ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache()); network_img.setDefaultImageResId(R.mipmap.img1); network_img.setErrorImageResId(R.mipmap.img2); network_img.setImageUrl(IMG, imageLoader); }通过测试看出来Imageloder虽然好用但是点击一次就会加载一遍,而networkImageView则加载一次后,不会在加载。
1 0
- Android网络请求框架 Volley
- Android网络请求框架Volley
- Android网络请求框架Volley
- Android Volley网络请求框架
- Android网络请求框架-----Volley
- Android网络请求框架Volley的使用
- Android Volley 网络请求框架图
- Android主流网络请求框架Volley
- Android网络请求框架:Volley简单使用
- Android 异步网络请求框架-Volley
- Android —— 网络请求框架 Volley
- android网络请求Volley框架的使用
- Android 主流网络请求框架 Volley
- Volley框架实现Android网络请求笔记
- Android网络请求框架Volley【转债】
- Android网络请求框架Volley学习
- Android 网络请求框架Volley学习笔记
- Android网络请求框架:Volley代码
- reentrantlock 和 synchronized 区别
- 华为云桌面FUSION ACCESS输入用户名和密码后连不上桌面的解决办法
- 什么是冷备份和热备份,有什么区别?
- 廖雪峰python教程阅读之字符串和编码
- Android开发笔记之gradle的buildTypes内部配置
- Android Volley网络请求框架
- 关于上转型对象与强制转换
- html5初入门第一堂
- SSL常见加密算法
- jquery DOM内部插入append()与appendTo()
- 工作中Django总结之一(项目)
- DP两道关于递增非递增的题目
- SQL语句AND&OR
- 深度学习Imagenet caffe AlexNet 实验步骤