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会一直堵塞。



相关文章
|
设计模式 缓存 Java
一步步带你读懂 Okhttp 源码
一步步带你读懂 Okhttp 源码
Volley源码分析(一)
Volley源码分析(一)
175 0
|
设计模式 XML 缓存
Android体系课学习 之 网络请求库Retrofit源码分析-看这一篇就够了
- 网络请求在我们开发中起的很大比重,有一个好的网络框架可以节省我们的开发工作量,也可以避免一些在开发中不该出现的bug - *Retrofit*是一个轻量级框架,基于*OkHttp*的一个*Restful*框架
|
设计模式 JSON 缓存
Android体系课学习 之 网络请求库Retrofit使用方式(附Demo)
- 网络请求在我们开发中起的很大比重,有一个好的网络框架可以节省我们的开发工作量,也可以避免一些在开发中不该出现的bug - Retrofit是一个轻量级框架,基于OkHttp的一个Restful框架
|
缓存 网络协议 Java
OkHttp源码详解之二完结篇
OkHttp源码详解之二完结篇
OkHttp源码详解之二完结篇
|
Android开发 流计算
【Android架构】基于MVP模式的Retrofit2+RXjava封装之文件下载(二)
上篇中我们介绍了基于MVP的Retrofit2+RXjava封装,还没有看的点击这里,这一篇我们来说说文件下载的实现。 首先,我们先在ApiServer定义好调用的接口 @GET Observable downloadFile(@Url St...
1378 0
|
缓存
Volley源码解析
Volley是一款轻量级的网络访问框架,适合小批量的数据传输。Volley的使用通过newRequestQueue创建一个RequestQueue对象,并调用RequestQueue.add方法来提交任务。
1081 0
|
Android开发 数据格式 XML
volley框架使用小Demo
MainActivity public class MainActivity extends AppCompatActivity { private static final String URL = "https://www.
997 0