Volley使用原理笔记

简介: 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请求,只需重写StringRequest的Map<String, String> getParams()函数,把参数返回即可。


Json请求:


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


图片请求:


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


ImageLoader用法:


使用步骤:


(1)创建一个RequestQueue对象。


(2) 创建一个ImageLoader对象。


(3) 获取一个ImageListener对象。


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



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()函数的返回。


RequestQueue的start方法主要做两件事:首先创建一个Cache线程。然后创建指定个数(默认4个)Network线程。即一共创建了5个线程。这些线程不断从队列里面取出Request,如果没有Request会一直堵塞。



相关文章
|
Ubuntu 网络安全 数据安全/隐私保护
使用MobaXterm ssh远程登录Ubuntu 20.04
接着等待安装完成。 再次输入ifconfig,可以看到我们的ip是192.168.197.139。
2265 0
|
8月前
|
消息中间件 存储 大数据
实时数据的魔法:如何让你的大数据像弹幕一样快?
实时数据的魔法:如何让你的大数据像弹幕一样快?
161 8
|
Prometheus 监控 Kubernetes
将service类型由"ClusterIP"改为"NodePort"无法使用nodeip+端口访问服务解决方法.
将service类型由"ClusterIP"改为"NodePort"无法使用nodeip+端口访问服务解决方法.
|
物联网 5G vr&ar
|
数据挖掘 Python
用Python轻松获取任意月份的公休日期
本文介绍了如何使用Python的`calendar`和`datetime`模块轻松获取任意月份的公休日期,包括周六和周日。通过示例代码,用户可以输入年份和月份,程序将输出该月份的所有公休日。这对于安排会议、规划旅行或数据分析都非常有用。
235 3
activiti 汉化 stencilset.json 文件内容
activiti 汉化 stencilset.json 文件内容
470 0
|
存储 API 开发工具
阿里云对象存储OSS
阿里云对象存储OSS
194 3
|
XML JSON API
电商数据集成:利用API接口实现商品详情自动化获取
在电子商务的快速发展中,数据集成成为提升业务效率和增强市场竞争力的关键。API(应用程序编程接口)作为数据集成的核心工具,允许商家自动化获取商品详情,从而实现高效的商品管理和数据分析。本文将探讨如何利用API接口自动化获取商品详情,并分析其对电商业务的影响。
|
PyTorch 算法框架/工具
使用transformer的YOLOv7及TensorRT部署
使用transformer的YOLOv7及TensorRT部署
使用transformer的YOLOv7及TensorRT部署
|
数据采集 运维 数据可视化
招商银行数据分析平台的前生今世
招商银行数据分析平台的前生今世
988 0