Google开源库-Volley

Android平台的网络通讯库,使是网通讯 更快,更简单,更健壮php

适合场景: 数据量不大,通讯 频繁。 大数据,流媒体是不适合使用的html

    * 它主要是帮咱们载入和缓存从远程网络加载的图片
    * 全部的请求都必须在主线程中发出。java

 

提供功能:android

1. 获取JSON 字符串,图片,图像(异步)json

2. 网络请求排序缓存

3. 网络请求的优先级处理网络

4. 缓存异步

5. 多级别的取消请求ide

6. 与Activity的生命周期联动大数据

--------------------------------------------------------

工程代码: VolleyDemo.zip

--------------------------------------------------------

实例:

1. 使用 Volley 实现 JSON 字符串请求

// 获取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);
}

 

2. 使用 Volley 实现异步加载图片

     使用 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);
}

 

3. 使用 NetWorkImageView 完成图片加载

    优势: 这个控件在被父类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();
}
相关文章
相关标签/搜索