/**
* 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. JQUERY、AJAX双击DIV,直接修改DIV内的内容

    最近在做后台功能开发的时候,用到对排序字段的修改,感觉只为了修改一个排序值,而要重新进入编辑页比较麻烦,于是自己动手写…… 最近在做后台功能开发的时候,用到对排序字段的修改,感觉只为了修改一个排序值, ...

  2. applicationContext.xml详解(转)

    转自:http://blog.csdn.net/heng_ji/article/details/7022171,写的很好,省得以后找,放此处 想必用过Spring的程序员们都有这样的感觉,Spring ...

  3. js string操作总结

    var str = "0123456789"; console.log(str.substring(0)); //------------"0123456789" ...

  4. PuTTY + Xming 远程使用 Linux GUI

    from http://www.zw1840.com/blog/zw1840/2008/10/putty-xming-linux-gui.html 在家里的PC上用VMWare做了一个Oracle E ...

  5. Python 的“+”和append在添加字符串时候的区别

    对于一个空的Python列表,往后添加内容有很多种,其中两种一个是用“+”直接添加内容,另外一种是Listname.append(x)来添加内容 其中,如果处理字符串 在使用“+”的时候,会将字符串拆 ...

  6. CentOS下命令行和桌面模式的切换方法(转载)

    桌面模式和命令行模式的切换方法 用编辑器打开 /etc/inittab 文件(这里用的是vi,你可以选择你喜欢的): #vi /etc/inittab 打开效果图如下: 桌面模式    : 把光标所在 ...

  7. C++例题2:汉诺塔问题

    #include<iostream>#include<stdlib.h>using namespace std;void Hanoi(int n,char A,char B,c ...

  8. Yeoman:适合现代Web应用的现代工作流

    Yeoman:适合现代Web应用的现代工作流   Yeoman是Google的团队和外部贡献者团队合作开发的,他的目标是通过Grunt(一个用于开发任务自动化的命令行工具)和Bower(一个HTML. ...

  9. 利用CSP探测网站登陆状态

    0x00 背景 今天看到zone里有同学发帖说了探测支付宝登录状态的帖子:http://zone.wooyun.org/content/17665 由此我想到了我们parsec的@/fd 半年前提到的 ...

  10. Sliding Window

    poj2823:http://poj.org/problem?id=2823 题意:给出一个序列,要求得到所有长度为k的连续子序列的最大和最小值.题解:直接上线段树 #include<iostr ...