Android平台的网络通讯库,使是网通讯 更快,更简单,更健壮php
适合场景: 数据量不大,通讯 频繁。 大数据,流媒体是不适合使用的html
* 它主要是帮咱们载入和缓存从远程网络加载的图片
* 全部的请求都必须在主线程中发出。java
提供功能:android
1. 获取JSON 字符串,图片,图像(异步)json
2. 网络请求排序缓存
3. 网络请求的优先级处理网络
4. 缓存异步
5. 多级别的取消请求ide
6. 与Activity的生命周期联动大数据
--------------------------------------------------------
工程代码: VolleyDemo.zip
--------------------------------------------------------
实例:
// 获取JSON字符串 public void getJOSONVolley() { RequestQueue requestQueue = Volley.newRequestQueue(this); String JSONDateUrl = "http://www.wwtliu.com/jsondata.html"; //这个网址有问题,你们能够换一个适合的网址 JsonObjectRequest jsonObjectRequest = new JsonObjectRequest( Request.Method.GET, JSONDateUrl, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject arg0) { Log.d(TAG, "Response JSONObject = " + arg0); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { Log.d(TAG, "Sorry, error occur = " + arg0); } }); requestQueue.add(jsonObjectRequest); }
使用 Volley 实现图片的异步加载,要比使用传统的通讯方式方便不少。
ImageLoader提供了两个get方法,具体的实现能够查看源码,值得注意的地方是,get(java.lang.String requestUrl, ImageLoader.ImageListener imageListener, int maxWidth, int maxHeight)这个方法中,咱们能够经过设置最大宽高来限制加载到内存中的图片的大小,减小OOM的发生,当加载一些大图片时,效果仍是很是明显的。
// 使用 Volley 实现异步加载图片 public void loadImageVolley() { String imgUrl = "http://b.hiphotos.baidu.com/baike/w%3D268/sign=9a2cb84a0cb30f24359aeb05f094d192/a8773912b31bb05119bca003357adab44aede005.jpg"; RequestQueue requestQueue = Volley.newRequestQueue(this); final LruCache<String, Bitmap> lrucache = new LruCache<String, Bitmap>( 20); // 传入String, 返回Bitmap ImageCache imageCache = new ImageCache() { @Override public void putBitmap(String key, Bitmap value) { lrucache.put(key, value); } @Override public Bitmap getBitmap(String key) { return lrucache.get(key); } }; ImageLoader loader = new ImageLoader(requestQueue, imageCache); ImageListener imgImageListener = loader.getImageListener(iv, R.drawable.ic_launcher, R.drawable.ic_launcher); loader.get(imgUrl, imgImageListener); }
优势: 这个控件在被父类dispatch的时候就会自动取消网络请求,这样咱们就不用担忧生命周期的问题
缺点:加载大量图片的时候可能更容易出现OOM问题,由于它没有处理图片的压缩,固然,你能保证你的图片很小或者你也能够重写NetworkImageView,给它添加一个设置加载尺寸的方法
<com.android.volley.toolbox.NetworkImageView android:id="@+id/iv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/iv" android:layout_below="@id/iv"/>
public void NetworkImageViewVolley(){ String imgUrl = "http://b.hiphotos.baidu.com/baike/w%3D268/sign=9a2cb84a0cb30f24359aeb05f094d192/a8773912b31bb05119bca003357adab44aede005.jpg"; RequestQueue requestQueue = Volley.newRequestQueue(this); final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(20); ImageCache imageCache = new ImageCache() { @Override public void putBitmap(String key, Bitmap value) { lruCache.put(key, value); } @Override public Bitmap getBitmap(String key) { return lruCache.get(key); } }; ImageLoader loader = new ImageLoader(requestQueue, imageCache); iv2.setTag("url"); iv2.setImageUrl(imgUrl, loader); }
调用
ImageView iv; NetworkImageView iv2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.iv); iv2 = (NetworkImageView) findViewById(R.id.iv2); getJOSONVolley(); loadImageVolley(); NetworkImageViewVolley(); }