Volley使用原理笔记

本文参考郭霖大神的笔记整理出来

用法:

普通字符串:

RequestQueue mQueue = Volley.newRequestQueue(context);  

StringRequest stringRequest = new StringRequest("http://www.baidu.com",  

    new Response.Listener<String>() {  
        @Override  
        public void onResponse(String response) {  
            Log.d("TAG", response);  
        }  

    }, new Response.ErrorListener() {  
        @Override  
        public void onErrorResponse(VolleyError error) {  
            Log.e("TAG", error.getMessage(), error);  
        }  
});  

mQueue.add(stringRequest);  


如果需要发POST请求,只需重写StringRequestMap<String, String> getParams()函数,把参数返回即可。

Json请求:

将字符串请求中的StringRequest替换为JsonObjectRequest JsonArrayRequest。相应的onResponse里的response参数类型会变成JSONObject和JSONArray

图片请求:

将字符串请求中的StringRequest替换为ImageRequest ,构造函数中,两个listener之间还有3个参数,分别是请求图片的宽度、高度和颜色属性(一般为Config.RGB_8888,相应的onResponseresponse变成Bitmap

ImageLoader用法:

使用步骤:

(1)创建一个RequestQueue对象。

(2) 创建一个ImageLoader对象。

(3) 获取一个ImageListener对象。

(4) 调用ImageLoaderget()方法加载网络上的图片。

RequestQueue mQueue = Volley.newRequestQueue(context);  

ImageLoader imageLoader = new ImageLoader(mQueue, new ImageCache() {  

       private LruCache<String, Bitmap> mCache;  

  

    public BitmapCache() {  

        int maxSize = 10 * 1024 * 1024;  

        mCache = new LruCache<String, Bitmap>(maxSize) {  

            @Override  

            protected int sizeOf(String key, Bitmap bitmap) {  

                return bitmap.getRowBytes() * bitmap.getHeight();  

            }  

        };  

    }  

  

    @Override  

    public Bitmap getBitmap(String url) {  

        return mCache.get(url);  

    }  

  

    @Override  

    public void putBitmap(String url, Bitmap bitmap) {  

        mCache.put(url, bitmap);  

    }  

 });  

ImageListener listener = ImageLoader.getImageListener(imageView,  

            R.drawable.default_image, R.drawable.failed_image);  

imageLoader.get("https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png", listener);  


原理:

newRequestQueue()里创建一个HttpStack对象,根据版本的不同,如果操作系统版本号大于等于9,创建的是HurlStack实例,否则是HttpClientStack实例。前者内部使用HttpURLConnection,后者内部使用HttpClient。然后将HttpStack作为参数去创建Network对象。(Network屏蔽了具体的HttpStack选择),然后将Network传入RequestQueue构造函数创建一个RequestQueue对象。调用RequestQueue对象的start()方法。并将该RequestQueue对象作为newRequestQueue()函数的返回。RequestQueuestart方法主要做两件事:首先创建一个Cache线程。然后创建指定个数(默认4个)Network线程。即一共创建了5个线程。这些线程不断从队列里面取出Request,如果没有Request会一直堵塞。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值