volley的使用

来源:互联网 发布:货币资金管理优化论文 编辑:程序博客网 时间:2024/05/17 03:39

Volley

Volley适合那些数据量不大,但频繁访问网络的操作,但对于下载文件则表现的很差

RequestQueue mQueue = Volley.newRequestQueue(context);

RequestQueue是一个请求队列的对象,它可以缓存所有的Http请求,按照一定的算法并发的发出这些请求,内部的设计非常适合高并发,因此

不用没一次Http请求就创建一个RequestQueue对象,每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了

StringRequest

Get请求:

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

00002.                         new Response.Listener<String>() {  

00003.                             @Override  

00004.                             public void onResponse(String response) {  

00005.                                 Log.d("TAG", response);  

00006.                             }  

00007.                         }, new Response.ErrorListener() {  

00008.                             @Override  

00009.                             public void onErrorResponse(VolleyError error) {  

00010.                                 Log.e("TAG", error.getMessage(), error);  

00011.                             }  

00012.                         });

stringRequest对象添加到RequestQueue对象中:mQueue.add(strigRequest);

Post请求: 匿名类StringRequest中重写getParams方法

00001. StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener) {  

00002.     @Override  

00003.     protected Map<String, String> getParams() throws AuthFailureError {  

00004.         Map<String, String> map = new HashMap<String, String>();  

00005.         map.put("params1""value1");  

00006.         map.put("params2""value2");  

00007.         return map;  

00008.     }  

00009. };  

JsonRequest

00001. JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html"null,  

00002.         new Response.Listener<JSONObject>() {  

00003.             @Override  

00004.             public void onResponse(JSONObject response) {  

00005.                 Log.d("TAG", response.toString());  

00006.             }  

00007.         }, new Response.ErrorListener() {  

00008.             @Override  

00009.             public void onErrorResponse(VolleyError error) {  

00010.                 Log.e("TAG", error.getMessage(), error);  

00011.             }  

00012.         });  

ImageRequest

00001. ImageRequest imageRequest = new ImageRequest(  

00002.         "http://developer.android.com/images/home/aw_dac.png",  

00003.         new Response.Listener<Bitmap>() {  

00004.             @Override  

00005.             public void onResponse(Bitmap response) {  

00006.                 imageView.setImageBitmap(response);  

00007.             }  

00008.         }, 00, Config.RGB_565, new Response.ErrorListener() {  

00009.             @Override  

00010.             public void onErrorResponse(VolleyError error) {  

00011.                 imageView.setImageResource(R.drawable.default_image);  

00012.             }  

00013.         });  

第三,四个参数指定允许的图片的最大宽度和最大高度,0表示不管图片多大都不会压缩,第五个参数为图片的颜色属性,Config.RGB_8888能展现最好的像素,每个像素点占4

字节,Config.RGB_565,每个像素占2个字节

将请求添加到请求对象mQueue

ImageLoader

内部也是使用ImageRequest对象,但比ImageRequest更高效,它可以过滤掉重复的链接,避免重复发送请求

00001. ImageLoader imageLoader = new ImageLoader(mQueue, new ImageCache() {   ------第一个为RequestQueue对象,第二个为ImageCache对象

00002.     @Override  

00003.     public void putBitmap(String url, Bitmap bitmap) {  

00004.     }  

00005.   

00006.     @Override  

00007.     public Bitmap getBitmap(String url) {  

00008.         return null;  

00009.     }  

00010. });  

00001. ImageListener listener = ImageLoader.getImageListener(imageView,  

00002.         R.drawable.default_image, R.drawable.failed_image);   ----第一张为加载时的图片,第二张为加载失败时的图片

00003. 

00004. 

00005. imageLoader.get("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",  

00001.                 listener, 200200);   ----也可不指定图片的宽高

ImageLoader的第二个参数

00001. public class BitmapCache implements ImageCache {  

00002.   

00003.     private LruCache<String, Bitmap> mCache;  

00004.   

00005.     public BitmapCache() {  

00006.         int maxSize = 10 * 1024 * 1024;  

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

00008.             @Override  

00009.             protected int sizeOf(String key, Bitmap bitmap) {  

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

00011.             }  

00012.         };  

00013.     }  

00014.   

00015.     @Override  

00016.     public Bitmap getBitmap(String url) {  

00017.         return mCache.get(url);  

00018.     }  

00019.   

00020.     @Override  

00021.     public void putBitmap(String url, Bitmap bitmap) {  

00022.         mCache.put(url, bitmap);  

00023.     }  

00024.   

00025. }  

NetworkImageView

00001. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

00002.     android:layout_width="fill_parent"  

00003.     android:layout_height="fill_parent"  

00004.     android:orientation="vertical" >  

00005.   

00006.     <Button  

00007.         android:id="@+id/button"  

00008.         android:layout_width="wrap_content"  

00009.         android:layout_height="wrap_content"  

00010.         android:text="Send Request" />  

00011.       

00012.     <com.android.volley.toolbox.NetworkImageView   

00013.         android:id="@+id/network_image_view"  

00014.         android:layout_width="200dp"  

00015.         android:layout_height="200dp"  

00016.         android:layout_gravity="center_horizontal"  

00017.         />  

00018.   

00001. networkImageView = (NetworkImageView) findViewById(R.id.network_image_view);  

00019. 

00020. </LinearLayout>  

00001. networkImageView.setDefaultImageResId(R.drawable.default_image);  

00002. networkImageView.setErrorImageResId(R.drawable.failed_image);  

00003. networkImageView.setImageUrl("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",  

00004.                 imageLoader);  

00021. 

 

0 0