Volley是Google官方的网络异步请求库,最大的特点是简单高效,多并发。但Volley不适合数据的上传和下载。

一、Get请求的使用

1、根据请求数据返回的形式选择合适的对象

Volley提供了StringRequest、JsonObjectRequest、JsonArrayRequest三种对象供我们选择。

(a)StringRequest ——- 主要用于我们不确定数据返回类型的情况。

(b)JsonObjectRequest ——- 主要用于返回的数据类型是JsonObject的情况。

(c)JsonArrayRequest ——- 主要用于返回的数据类型是JsonArray的情况。

注:StringRequest是包含其他两种类型的,选择使用最合适最接近的类型可以提升性能。

2、生成请求对象

StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {//成功的接口回调@Overridepublic void onResponse(String s) {Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();}
}, new Response.ErrorListener() {//失败的接口回调@Overridepublic void onErrorResponse(VolleyError volleyError) {Toast.makeText(MainActivity.this,volleyError.toString(), Toast.LENGTH_LONG).show();}
});

3、创建请求队列,以便存放上面创建的请求

public class MyApplication extends Application {private static RequestQueue queues;@Overridepublic void onCreate() {super.onCreate();//实例化请求队列queues = Volley.newRequestQueue(getApplicationContext());}public static RequestQueue getHttpQueues(){return queues;}
}

注:还要在AndroidManifest.xml文件中的application标签中加入刚才新建的MyApplication。

android:name=".MyApplication"

4、给请求设置tag标签

stringRequest.setTag("phone");

5、将请求加入请求队列

MyApplication.getHttpQueues().add(stringRequest);

二、Post请求的使用

Post请求的使用,绝大部分步骤是与Get请求是相同的,唯一的区别在于Get请求将要请求的参数以 ? + 键值对的方式接在链接之后,而Post请求需要重写其中的方法来传入参数,如下:

StringRequest str = new StringRequest(Request.Method.POST, url , new Response.Listener<String>() {@Overridepublic void onResponse(String s) {}
}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError volleyError) {}
}){@Overrideprotected Map<String, String> getParams() throws AuthFailureError {Map<String, String> map = new HashMap<>();map.put("apikey", apiKey);map.put("method", "publish");map.put("appkey", "5316bd7179b6570f2ca6e20b");map.put("seckey", "sec-qaAQOCmuFL22b0mv78hcOEyc9DzB9q0zesIfBAereaN6FAcb");map.put("topic", "test_topic");map.put("msg", "this is one message");return map;}
};

上面我们都是只介绍了StringRequest类,假设我们返回的是JsonObject类型的数据,我们采用JsonObjectRequest类呢,其实大部分参数还是不变的,只是她的构造函数多了一个JsonObject类型的参数,用于传入需要POST的数据,如果是Get方式,则直接传入null,下面是一个简单的例子:

private void volleyPost() {
final String apiKey = "f04a61e";
String url = "http://apis.baidu.com/yunba/realtime_restful_api/publish";
Map<String, String> map = new HashMap<>();
map.put("apikey", apiKey);
map.put("method", "publish");
map.put("appkey", "5316bd7179b6570f2ca6e20b");
map.put("seckey", "sec-qaAQOCmuFL22b0mv78hcOEyc9DzB9q0zesIfBAereaN6FAcb");
map.put("topic", "test_topic");
map.put("msg", "this is one message");JSONObject json = new JSONObject(map);
JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, json, new Response.Listener<JSONObject>() {@Overridepublic void onResponse(JSONObject jsonObject) {Toast.makeText(MainActivity.this, "DD" + jsonObject.toString(), Toast.LENGTH_LONG).show();}
}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError volleyError) {Toast.makeText(MainActivity.this, "F" + volleyError.toString(), Toast.LENGTH_LONG).show();}
});jsonRequest.setTag("xiao");MyApplication.getHttpQueues().add(jsonRequest);
}

注:我们还应该在Activity的生命周期结束时,结束网络请求,所以我们需要在Activity的onStop()方法中添加如下一句:

MyApplication.getHttpQueues().cancelAll("tag");

三、使用Volley加载网络图片

Volley中加载网络图片有很多种方式:

1、使用ImageRequest加载网络图片

ImageRequest加载网路图片的方式和Volley中进行一般的网络请求差别不大,只是参数略有不同。参数依次为图片url、请求成功的回调、图片的最大宽度,最大高度(此处传入0则是用原始尺寸解码显示,传入其他数据则按比例进行缩放解码)、图片的缩放类型、图片的显示配置、请求失败的回调。下面是一个简单的例子:

/*** 网络请求并设置图片*/
private void setImage() {String url = ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {@Overridepublic void onResponse(Bitmap bitmap) {imageView.setImageBitmap(bitmap);}}, 0, 0, ImageView.ScaleType.CENTER_INSIDE, Bitmap.Config.RGB_565, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError volleyError) {imageView.setBackgroundResource(R.mipmap.ic_launcher);}});request.setTag("image");MyApplication.getHttpQueues().add(request);
}

注:图片的网路请求还是和前面一样需要设置tag,再加入请求队列中。

2、使用 LruCache、ImageCache和ImageLoader结合加载网络图片

我可以先定义一个类用于实现ImageCache,在其中结合LruCache完成对图片的缓存,这个类的实例将作为后面的参数传入。

public class BitmapCache implements ImageLoader.ImageCache {public LruCache<String, Bitmap> cache;//最大缓存为10M,当缓存大于设定值时将自动启动垃圾回收public int max = 10 * 1024 * 1024;public BitmapCache(){//实例化cachecache = new LruCache<String, Bitmap>(max){@Overrideprotected int sizeOf(String key, Bitmap value) {return value.getRowBytes() * value.getHeight();}};}@Overridepublic Bitmap getBitmap(String s) {//返回缓存中的图片return cache.get(s);}@Overridepublic void putBitmap(String s, Bitmap bitmap) {cache.put(s, bitmap);}
}

接下来我们需要获得ImageLoader的实例

//创建ImageLoader的实例(参数依次为请求队列和图片缓存)
ImageLoader loader = new ImageLoader(MyApplication.getHttpQueues(), new BitmapCache());

接着我们需要获得图片加载监听类的实例

imageView = (ImageView) findViewById(R.id.show_image);
//创建图片加载监听实例(参数依次为图片显示控件实例,默认显示的图片的id,加载出错时显示的图片的id)
ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.mipmap.ic_launcher, R.mipmap.ic_launcher);

最后我们传入相应的参数来加载图片

String url = "https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1472736685&di=ea36b0007865cef24d9d659c03b26485&src=http://img.sucai.redocn.com/attachments/images/201002/20100206/20100206_c3f11163684180e389c57LUEUjSMDaax.jpg";
loader.get(url, listener);

3、使用Volley自带的NetworkImageView结合ImageLoader进行图片加载

首先获得ImageLoader的实例

//创建ImageLoader的实例(参数依次为请求队列和图片缓存)
ImageLoader loader = new ImageLoader(MyApplication.getHttpQueues(), new BitmapCache());

获得NetworkImageView的实例并设置简单的参数

//设置默认显示的图片      netImageview.setDefaultImageResId(R.mipmap.ic_launcher);
//设置加载错误时需要显示的图片      netImageview.setErrorImageResId(R.mipmap.ic_launcher);

最后设置需要加载的图片

//设置需要加载的图片
netImageview.setImageUrl(url, loader);

以上就是我在学习Volley的过程中的一个简单的记录总结。

Android网络请求 ------ Volley的使用相关推荐

  1. ym—— Android网络框架Volley(终极篇)

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103).谢谢支持! 没看使用过Volley的同学能够,先看看 Android网络框架Volley(体验篇) ...

  2. Android -- 网络请求

    一. HttpURLConnection 二. HttpClient 三.Volley 四.OkHttp 五. Retrofit ----------------------------------- ...

  3. okhttp的应用详解与源码解析--android网络请求框架发展史

    乘5G之势,借物联网之风,Android未来亦可期,Android优势在于开放,手机.平板.车载设备.智能家居等都是Android的舞台,Google不倒,Android不灭,本专栏的同步视频教程已经 ...

  4. Android网络框架Volley项目实战-刘桂林-专题视频课程

    Android网络框架Volley项目实战-5257人已学习 课程介绍         使用Google 2013 I/O大会上发布的Volley请求框架做几个实战项目,归属地查询,QQ测试吉凶,天气 ...

  5. Android网络请求框架之Retrofit(二)

    前面一篇文章介绍了Retrofit的基本用法,没有看过的童鞋可以移步:Android网络请求框架之Retrofit(一),现在我们来继续介绍Retrofit配合RxJava.RxAndroid的用法. ...

  6. Volley网络请求框架简析——Android网络请求框架(三)

    题记-- 人来到这个世界上,只有两件事情,生与死, 一件事完了,另一件事还急什么? 有缘而来,无缘而去, 识自本心,见自本性 不起妄缘,无心无为 自由自在,动静自如 冷暖自知,则是修行 1.初始化一个 ...

  7. android网络请求库volley方法详解

    使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包 volley网络请求步骤: 1. 创建请求队列     ...

  8. Android网络请求通信之Volley

    一.Volley简介 Volley网络框架是Google公司在2013年发布的一款Android平台上的网络请求通信库.以下是对Volley的简单归纳. Volley的优点: 使网络通信更快.更简单. ...

  9. Android网络请求框架Volley的使用

    Volley是Google在2013年推出的一款网络请求的框架,主要解决数据量小但是请求频繁的情况,对于大流量的比如文件上传下载,流媒体等则表现不佳.一般用于json获取,图片加载. 要想使用voll ...

最新文章

  1. iOS10 UI教程视图的生命周期
  2. python爬虫人门(10)Scrapy框架之Downloader Middlewares
  3. jmeter察看结果树-响应数据乱码
  4. Notepad++高亮AS文件
  5. css+html弄出哆啦a梦,祝儿童节快乐(DIV+CSS绘制哆啦A梦)
  6. Python学习笔记:序列之字符串
  7. POJ 1064 Cable master (二分答案)
  8. 检讨:丢了我女儿和项目设计感想
  9. 学科前沿技术专题第九章
  10. MiroTik 路由器配置无线中继模式(超细教程)
  11. SREng 使用指南(二)启动项目详细解说
  12. 最优化算法之粒子群算法(PSO)
  13. 在线二进制取余计算机,十进制转二进制和十六进制计算器
  14. xml的三种解析方法
  15. 鸿蒙手表定位功能Demo体验,适用儿童、老年和外出旅游安全市场
  16. 异步编程之 Isolate
  17. C语言实现七夕表白爱心
  18. RLC串联电路截止频率
  19. 解密中国互联网企业创始人,程序员打下半壁江山
  20. 【Codeforces】1635E Cars 题解

热门文章

  1. HOW TO:Be more productive aaron swartz
  2. 网络编程-IP地址、端口号、网络字节序
  3. VisualFreeBasic:VisualBasic6望尘莫及之循环内控制
  4. Java 8计算一年前或一年后的日期
  5. Oracle Form二次开发实战总结
  6. 家用游戏机的历史:世嘉、任天堂和 PlayStation 的故事
  7. 数据中台应用实战-数据中台建设四步方法论:采、存、通、用
  8. 流水线作业调度问题c语言,流水线作业调度问题
  9. 在 Kubernetes 上执行 GitHub Actions 流水线作业
  10. 信道容量 Channel capacity