Android开源:网络框架volley使用(一)---使用方法笔记
1.Get方法获取字符串:
publicvoidloadGetJson(Stringurl){//创建RequestQueue对象,一个activity创建一个对象即可RequestQueuemQueue=Volley.newRequestQueue(getApplicationContext());//创建get方法的json请求对象StringRequestsr=newStringRequest(url,newListener<String>(){@OverridepublicvoidonResponse(Stringresponse){Log.e("onResponse",""+response);}},newErrorListener(){@OverridepublicvoidonErrorResponse(VolleyErrorerror){Log.e("onErrorResponse",""+error.toString());}});//将请求对象加入到请求队列里mQueue.add(sr);}
2.指定get或者post方法获取字符串
(1)get方法
RequestQueuerequestQueue=Volley.newRequestQueue(this);StringRequestsRequest=newStringRequest(Request.Method.GET,CITY_CODE_URL,newListener<String>(){@OverridepublicvoidonResponse(Stringresponse){System.out.println(response);}},newResponse.ErrorListener(){@OverridepublicvoidonErrorResponse(VolleyErrorarg0){System.out.println("sorry,Error");}});sRequest.setShouldCache(false);requestQueue.add(sRequest);
(2)post方法
StringRequest中并没有提供设置POST参数的方法,但是当发出POST请求的时候,Volley会尝试调用StringRequest的父类——Request中的getParams()方法来获取POST参数,那么解决方法自然也就有了,我们只需要在StringRequest的匿名类中重写getParams()方法,在这里设置POST参数就可以了,代码如下所示:
StringRequeststringRequest=newStringRequest(Method.POST,url,listener,errorListener){@OverrideprotectedMap<String,String>getParams()throwsAuthFailureError{Map<String,String>map=newHashMap<String,String>();map.put("params1","value1");map.put("params2","value2");returnmap;}};
完整范例如下:
publicvoidloadPostLogin(Stringurl){RequestQueuemQueue=Volley.newRequestQueue(getApplicationContext());StringRequestsr=newStringRequest(Request.Method.POST,url,newListener<String>(){@OverridepublicvoidonResponse(Stringresponse){Log.e("onResponse",""+response);}},newErrorListener(){@OverridepublicvoidonErrorResponse(VolleyErrorerror){Log.e("onErrorResponse",""+error.toString());}}){@OverrideprotectedMap<String,String>getParams()throwsAuthFailureError{Map<String,String>map=newHashMap<String,String>();map.put("UserName","glblong");map.put("PassWord","123456");returnmap;}};mQueue.add(sr);}
3.JsonObjectRequest和JsonArrayRequest用法与StringRequest一致,方法如下:
第二个参数说明:
Constructor which defaults to GET if jsonRequest is null, POST otherwise.
默认情况下设成null为get方法,否则为post方法。
JsonObjectRequestjsonObjectRequest=newJsonObjectRequest(url,null,newResponse.Listener<JSONObject>(){@OverridepublicvoidonResponse(JSONObjectresponse){Log.d("TAG",response.toString());}},newResponse.ErrorListener(){@OverridepublicvoidonErrorResponse(VolleyErrorerror){Log.e("TAG",error.getMessage(),error);}});
4.ImageRequest用法
/***第三第四个参数分别用于指定允许图片最大的宽度和高度,如果指定的网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩,*指定成0的话就表示不管图片有多大,都不会进行压缩。**@paramurl*图片地址*@paramlistener*@parammaxWidth*指定允许图片最大的宽度*@parammaxHeight*指定允许图片最大的高度*@paramdecodeConfig*指定图片的颜色属性,Bitmap.Config下的几个常量.*@paramerrorListener*/publicvoidgetImgRequest(finalImageViewiv,Stringurl){RequestQueuequeue=Volley.newRequestQueue(getApplicationContext());ImageRequestir=newImageRequest(url,newListener<Bitmap>(){publicvoidonResponse(Bitmapresponse){iv.setImageBitmap(response);};},0,0,Config.RGB_565,newErrorListener(){@OverridepublicvoidonErrorResponse(VolleyErrorerror){//TODOAuto-generatedmethodstub}});queue.add(ir);}
5.ImageLoader用法
ImageLoader比ImageRequest更加高效,因为它不仅对图片进行缓存,还可以过滤掉重复的链接,避免重复发送请求。
//1.创建RequestQueue实例RequestQueuequeue=Volley.newRequestQueue(getApplicationContext());//2.创建ImageLoader实例,ImageCache需要重写才能实现缓存ImageLoaderil=newImageLoader(queue,newImageCache(){@OverridepublicvoidputBitmap(Stringurl,Bitmapbitmap){//TODOAuto-generatedmethodstub}@OverridepublicBitmapgetBitmap(Stringurl){//TODOAuto-generatedmethodstubreturnnull;}});//3.创建ImageListener实例,设置默认图片和加载失败图片ImageListenerlistener=ImageLoader.getImageListener(iv,R.drawable.img_loading,R.drawable.img_failed);//4.通过get方法加载图片il.get(url,listener);
使用范例代码如下:
(1)先实现ImageCache接口
importandroid.graphics.Bitmap;importandroid.support.v4.util.LruCache;importcom.android.volley.toolbox.ImageLoader.ImageCache;publicclassImageLoaderCacheimplementsImageCache{privateLruCache<String,Bitmap>mCache;publicImageLoaderCache(){intmaxSize=10*1024*1024;//设置缓存图片的大小为10MmCache=newLruCache<String,Bitmap>(maxSize){@OverrideprotectedintsizeOf(Stringkey,Bitmapbitmap){returnbitmap.getRowBytes()*bitmap.getHeight();}};}@OverridepublicBitmapgetBitmap(Stringurl){returnmCache.get(url);}@OverridepublicvoidputBitmap(Stringurl,Bitmapbitmap){mCache.put(url,bitmap);}}
(2)使用方法如下:
publicvoidgetImgLoader(ImageViewiv,Stringurl){RequestQueuequeue=Volley.newRequestQueue(getApplicationContext());ImageLoaderil=newImageLoader(queue,newImageLoaderCache());ImageListenerlistener=ImageLoader.getImageListener(iv,R.drawable.img_loading,R.drawable.img_failed);//加载并限定图片宽度和高度il.get(url,listener,200,300);}
6.NetworkImageView的用法
NetworkImageView在加载图片的时候会自动获取自身控件的宽高,然后对比网络图片的宽度,再决定是否需要对图片进行压缩。也就是说,压缩过程是在内部完全自动化的,并不需要我们关心,NetworkImageView会始终呈现给我们一张大小刚刚好的网络图片,不会多占用任何一点内存。
如果不想对图片进行压缩的话,只需要在布局文件中把NetworkImageView的layout_width和layout_height都设置成wrap_content就可以了,这样NetworkImageView就会将该图片的原始大小展示出来,不会进行任何压缩。
(1)布局文件中添加NetworkImageView控件
<com.android.volley.toolbox.NetworkImageViewandroid:id="@+id/networkImageView1"android:layout_width="120dp"android:layout_height="120dp"android:layout_centerHorizontal="true"android:layout_marginTop="60dp"android:src="@drawable/ic_launcher"/>
2.代码实现
RequestQueuequeue=Volley.newRequestQueue(getApplicationContext());ImageLoaderp_w_picpathLoader=newImageLoader(queue,newImageLoaderCache());NetworkImageViewniv=(NetworkImageView)findViewById(R.id.networkImageView1);niv.setDefaultImageResId(R.drawable.img_loading);niv.setErrorImageResId(R.drawable.img_failed);niv.setImageUrl(url,p_w_picpathLoader);
7.取消请求
Volley提供了强大的API取消未处理或正在处理的请求。取消请求最简单的方法是调用请求队列cancelAll(tag)的方法,前提是你在添加请求时设置了标记。这样就能使标签标记的请求挂起。
给请求设置标签:
request.setTag("MyTag");
使用ApplicationController添加使用了标签的请求到队列中:
ApplicationController.getInstance().addToRequestQueue(request,"MyTag");
取消所有指定标记的请求:
mRequestQueue.cancelAll("MyTag");
参考:
Android开源:网络框架volley使用(一)---使用方法笔记
Android开源:网络框架volley使用(二)---框架的自定义改造
Asynchronous HTTP Requests in Android Using Volley声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。