Android 网络框架---Volley
/**
* 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的更多相关文章
- Android网络框架Volley(体验篇)
Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...
- Android网络框架Volley(实战篇)
之前讲了ym—— Android网络框架Volley(体验篇),大家应该了解了volley的使用,接下来我们要看看如何把volley使用到实战项目里面,我们先考虑下一些问题: 从上一篇来看 mQu ...
- Android网络框架-Volley实践 使用Volley打造自己定义ListView
这篇文章翻译自Ravi Tamada博客中的Android Custom ListView with Image and Text using Volley 终于效果 这个ListView呈现了一些影 ...
- Android网络框架Volley
Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...
- ym—— Android网络框架Volley(终极篇)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103).谢谢支持! 没看使用过Volley的同学能够,先看看Android网络框架Volley(体验篇)和 ...
- Android 网络框架Volley的使用
Volley简介 在平时的开发过程中,我们的应用几乎总是在和网络打交道, 在android下的网络编程一般都是基于Http协议的 ,常见的是HttpURLConnection和HttpClient 两 ...
- ym—— Android网络框架Volley(体验篇)
VolleyGoogle I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...
- Android 网络框架 volley源码剖析
转载请注明出处: http://blog.csdn.net/guolin_blog/article/details/17656437 经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了, ...
- Android热门网络框架Volley详解[申明:来源于网络]
Android热门网络框架Volley详解[申明:来源于网络] 地址:http://www.cnblogs.com/caobotao/p/5071658.html
随机推荐
- zoj 3209.Treasure Map(DLX精确覆盖)
直接精确覆盖 开始逐行添加超时了,换成了单点添加 #include <iostream> #include <cstring> #include <cstdio> ...
- dedecms 文章排列方式
orderby='sortrank' 文档排序方式orderby='hot' 或 orderby='click' 表示按点击数排列orderby='sortrank' 或 orderby='pubda ...
- 当INPUT 连续输入是连续触发
在 Web 开发中经常会碰到需要动态监听输入框值变化的情况,如果使用 onkeydown.onkeypress.onkeyup 这个几个键盘事件来监测的话,监听不了右键的复制.剪贴和粘贴这些操作,处理 ...
- C程序设计语言练习题1-16
练习1-16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本. 代码如下: #include <stdio.h> // 包含标准库的信息 ...
- CentOS 6.3 配置FTP
一.FTP的安装 .检测是否安装了FTP:[root@localhost ~]# rpm -q vsftpd 如果安装了会显示版本信息: [root@localhost ~]# vsftpd-2.0. ...
- 欧拉计划(1~3)ps:以后看题一定要认真
那天的题挺简单的 下面来看下 No1 If we list all the natural numbers below 10 that are multiples of 3 or 5, we get ...
- VS2012中使用Boost库的方法(超级简单)
很不错的博客一定得看 http://my.csdn.net/caimouse 1.下载boost库 从http://www.boost.org上下载到目前最新的boost库,快速传送门:boost_1 ...
- 【原生态跨平台:ASP.NET Core 1.0(非Mono)在 Ubuntu 14.04 服务器上一对一的配置实现-篇幅1】
鸡冻人心的2016,微软高产年. build 2016后 各种干货层出不穷. 1 Win10 集成了bash ,实现了纳德拉的成诺,Microsoft Love Linux!!! 2 跨平台 ,收 ...
- JAVA循环结合标签使用,控制跳转
public static void main(String[] args) { outer: for (int i = 0; true; i++) { inner: for (int j = 0; ...
- nginx 配置多个主机
<pre name="code" class="html"> server { listen 8001; server_name localhost ...