/**
* Volley 可以同时请求多个,允许高并发
* 特性:
* 1、JSON、图片等的异步下载
* 2、网络请求的排序(Scheduling)
* 3、网络请求的优先级处理
* 4、缓存
* 5、多级别取消请求
* 6、和Activity的生命周期的联动(Activity结束时同时取消所有网络请求)
*
* 步骤:
* 1、拿到一个请求队列(RequestQueue只需要一个即可,不像AsyncTask每次使用都要new一个).
* 这个请求队列对象,可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。RequestQueue内部的设计就是非常适合高并发的。
* 因此我们不必为每一个HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。
* RequestQueue queue = Volley.newRequestQueue(this);
* 2、实现Volley的异步请求类(JsonObjectRequest,JsonArrayRequest,StringRequest,ImageRequest)
*/
 public class MainActivity extends AppCompatActivity {

     ImageView iv;
NetworkImageView iv_network;
RequestQueue queue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
iv_network = (NetworkImageView) findViewById(R.id.iv_network); queue = Volley.newRequestQueue(getApplicationContext());//或者用getApplicationContext()
} private Response.ErrorListener errorListener = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG","请求错误");
}
}; public void net1(View v){
//第一个参数就是目标服务器的URL地址,第二个参数是服务器响应成功的回调,第三个参数是服务器响应失败的回调
//默认GET请求
StringRequest request = new StringRequest("http://www.baidu.com", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("TAG","----response:"+response.toString());
}
},errorListener); //将请求添加到队列中
queue.add(request);
} public void net2(View v){
//HTTP请求方式使用POST,
//StringRequest中并没有提供设置POST参数的方法,
//但是当发出POST请求的时候,Volley会尝试调用StringRequest的父类——Request中的getParams()方法来获取POST参数,
//我们只需要在StringRequest的匿名类中重写getParams()方法,在这里设置POST参数就可以了
StringRequest request = new StringRequest(Request.Method.POST, "http://route.showapi.com/109-35", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("TAG","---->response"+response.toString());
}
},errorListener){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> map = new HashMap<>();
map.put("showapi_appid","27306");
map.put("showapi_sign","150e9206e7f542bab4affe49d73cb920");
return map;
}
}; queue.add(request);
} public void net3(View v){
//类似于StringRequest,JsonRequest也是继承自Request类的,不过由于JsonRequest是一个抽象类,因此我们无法直接创建它的实例。
//JsonRequest有两个直接的子类,JsonObjectRequest和JsonArrayRequest //注意这里是拿不到数据的。
//jsonRequest为null,重写getParams()然而并没有什么用
//JsonObjectRequest的几个坑,详情见http://blog.csdn.net/onlysnail/article/details/47905375
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, "http://route.showapi.com/109-35", null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.e("TAG","----response"+response.toString());
}
}, errorListener){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> map = new HashMap<>();
map.put("showapi_appid","27306");
map.put("showapi_sign","150e9206e7f542bab4affe49d73cb920");
return map;
}
};
queue.add(request);
} public void net4(View v){ ImageRequest request = new ImageRequest("https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=1858172584,1668311861&fm=80&w=179&h=119&img.JPEG", new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
iv.setImageBitmap(response);
}
//防止OOM, 图像裁剪,品质压缩,三级缓存
//允许图片最大的宽高,可调,压缩比率为0的话就表示不管图片有多大,都不会压缩
},200,200, ImageView.ScaleType.FIT_XY, Bitmap.Config.RGB_565,errorListener); queue.add(request);
} public void net5(View v){ ImageLoader loader = new ImageLoader(queue, new ImageLoader.ImageCache() {
/**
* LruCache原理:Cache保存一个强引用来限制内容数量。每当Item被访问的时候,此Item就会移动到队列的头部。
* 当cache已满的时候加入新的item时,在队列尾部的item会被回收。
* 解释:当超出指定内存值则移除最近最少用的图片内存
* 拿到内存的八分之一来做图片内存缓存
*/
LruCache<String,Bitmap> bitmapLruCache = new LruCache<String,Bitmap>((int) (Runtime.getRuntime().maxMemory()/8)){
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getByteCount();
}
}; @Override
public Bitmap getBitmap(String url) {
return bitmapLruCache.get(url);
} @Override
public void putBitmap(String url, Bitmap bitmap) {
bitmapLruCache.put(url,bitmap);
} }); loader.get("https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=2519065955,952826078&fm=80&w=179&h=119&img.JPEG", new ImageLoader.ImageListener() {
@Override
public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
iv.setImageBitmap(response.getBitmap());
} @Override
public void onErrorResponse(VolleyError error) { }
}); } public void net6(View v){
ImageLoader loader = new ImageLoader(queue, new ImageLoader.ImageCache() {
LruCache<String,Bitmap> cache = new LruCache<String,Bitmap>((int) (Runtime.getRuntime().maxMemory()/8)){
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getByteCount();
}
}; @Override
public Bitmap getBitmap(String url) {
return cache.get(url);
} @Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url,bitmap);
}
}); /**
* NetworkImageView是一个自定义控件,继承自ImageView,封装了请求网络加载图片功能
* NetworkImageView并没有提供设置最大宽高的方法,根据我们设置空间的宽高结合网络图片的宽高内部会自动去实现压缩
* 如果我们不想要压缩,可以设置NetworkImageView控件的宽高都为wrap_content
* 现在xml布局中引用
*/
iv_network.setImageUrl("https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=214772963,3279795725&fm=80&w=179&h=119&img.JPEG",loader);
}
}

MainActivity.java

 

Android 网络框架---Volley的更多相关文章

  1. Android网络框架Volley(体验篇)

    Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...

  2. Android网络框架Volley(实战篇)

      之前讲了ym—— Android网络框架Volley(体验篇),大家应该了解了volley的使用,接下来我们要看看如何把volley使用到实战项目里面,我们先考虑下一些问题: 从上一篇来看 mQu ...

  3. Android网络框架-Volley实践 使用Volley打造自己定义ListView

    这篇文章翻译自Ravi Tamada博客中的Android Custom ListView with Image and Text using Volley 终于效果 这个ListView呈现了一些影 ...

  4. Android网络框架Volley

    Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...

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

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

  6. Android 网络框架Volley的使用

    Volley简介 在平时的开发过程中,我们的应用几乎总是在和网络打交道, 在android下的网络编程一般都是基于Http协议的 ,常见的是HttpURLConnection和HttpClient 两 ...

  7. ym—— Android网络框架Volley(体验篇)

    VolleyGoogle I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...

  8. Android 网络框架 volley源码剖析

    转载请注明出处:  http://blog.csdn.net/guolin_blog/article/details/17656437 经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了, ...

  9. Android热门网络框架Volley详解[申明:来源于网络]

    Android热门网络框架Volley详解[申明:来源于网络] 地址:http://www.cnblogs.com/caobotao/p/5071658.html

随机推荐

  1. 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...

  2. js中的潜伏者之Arguments对象

    argument 说明: 在JavaScript中,arguments是对象的一个特殊属性.arguments对象就像数组,但是它却不是数组.可以理解为他是潜伏者,通俗的说,就是你传的参数不一定按照参 ...

  3. VLC命令参数(转载)

    转载自: http://blog.csdn.net/bytxl/article/details/6613449 http://www.cnblogs.com/MikeZhang/archive/201 ...

  4. Js设置所有连接是触发/swt/的代码

    Js设置所有连接是触发/swt/的代码 代码为: <script> var doca=document.getElementsByTagName('a'); for(var i=0;i&l ...

  5. Josephus

    利用循环链表模拟约瑟夫问题,把自杀的人的顺序排列出来 代码如下: #include<stdio.h> #include<stdlib.h> typedef int status ...

  6. cloudera-scm-server ip改了怎么办了

    1.vi /etc/cloudera-scm-agent/config.ini #改下ip 2.manager 老只看到一个主机 rm -f /var/lib/cloudera-scm-agent/u ...

  7. Maya+3dsMax三维建模

    Maya比较擅长动画,在人物和动物的行为活动方面比较擅长 而3ds Max在建筑物地理地图方面比较擅长,多应用于地理 将两者结合起来将会非常有用

  8. Zephyr-开发流程

    开发流程 前提1:检查你的Linux主机满足入门指南中规定的最低要求. 具体请参考 :  物联网操作系统-Zephyr 前提2: 确保SDK的环境变量和zephyr项目的环境变量. 终端执行: $ e ...

  9. Whitespace character

    In computer science, whitespace is any character or series of whitespace characters that represent h ...

  10. BZOJ 1070 修车

    Description 同一时刻有\(N\)位车主带着他们的爱车来到了汽车维修中心.维修中心共有\(M\)位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这\(M\)位技术 ...