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
随机推荐
- cocos2dx JAVA,C++互相调用函数
C++调用JAVA 例子 #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include "platform/android/jni/Jni ...
- IOS DLNA开发(CyberLink和PlatinumKit)
1.CyberLink 和 PlatinumKit 两者的比较 CyberLink大概在2010年之后功能就没有更新,部分功能不够完善,网上有下载地址 http://www.pudn.com/down ...
- 【POJ3481】【splay】Double Queue
Description The new founded Balkan Investment Group Bank (BIG-Bank) opened a new office in Bucharest ...
- 我的项目:一个chrome插件的诞生记,名字叫jumper
选课是个问题,为了选课,便有了以下的故事. 最开始,萌生想法于2013年7月. 接着网上了解了chrome的结构知识,却发现例子是假的. 幸好有之前师兄的一个同功能插件开源,但代码写得很乱,我喜欢逻辑 ...
- 【Linux】常用命令
一.文件结构 /: 根目录 /bin: 系统所需要的那些命令位于此目录. /boot: Linux的内核及引导系统程序所需要的文件目录,GRUB或LILO系统引导管理器也 ...
- Android 常用系统控件
1. 日期选择器 DatePickerDialog 2. 时间选择器 TimePickerDialog 3. 单选按钮 RadioButton 4. 多选按钮 CheckBox 5. 下拉列表 Spi ...
- iOS中浅淡UIApplication单例-b
在iOS的操作系统中 每一个程序都对应一个application单例,每一个application都对应一个Appdelegate代理,在代理中控制程序的各个状态.我们在程序中获取Applicatio ...
- 应用ubuntu(安装)
U盘安装Ubuntu 12.04. 工具 UltraISO 9.6.1 ubuntu-12.04.3-desktop-i386 启动U盘 安装UltralISO,启动 文件—打开,选中下载的ubunt ...
- 【面试&笔试】ASP.NET的相关问题
1. 介绍ASP.NET 答:ASP.NET不是一种语言,而是创建动态web页的一种强大的服务器端技术,它是Microsoft.NETFramework中一套用于生成Web应用程序和Web服 ...
- jQuery Validate 验证,校验规则写在控件中的具体例子
将校验规则写到控件中 <script src="../js/jquery.js" type="text/javascript"></scrip ...