volley的用法(数据库网络请求框架 )

Volley的用法

集AsyncHttpClient和ImageLoader优点于一身,适合数据请求频繁但是数据量不大的网络请求框架。不适合大数据的请求,比如文件下载。

Volley请求三步:

1、创建一个RequestQueue对象

2、创建一个request(StringRequest -- 返回String、JsonReques -- 返回Jsont、ImageRequest -- 返回Bitmap图片),创建时需要参数--回调监听,请求成功后,会将返回结果回调

3、将调用RequestQueue对象的add方法,将request加入queue即可
注意:在进行post请求时,因为request没有提供设置参数的方法,但是Volley在执行网络请求的时候,会调用父类的getParameter方法获取参数,所以我们可以通过匿名对象的方式复写父类的getParameter方法,将参数提供给Volley

Volley中的ImageLoader的用法 --- 能够过滤重复链接

1、创建一个RequestQueue对象

2、创建一个ImageLoader对象(需要将RequestQueue作为参数,另外传入一个ImageCache对象,做图片缓存,可以复写ImageCache中的方法,使用三级缓存对图片进行处理)

3、通过ImageLoader对象得到一个ImageListener对象(可以设置默认图片和加载失败的图片)

4、调用ImageLoader对象的get方法请求网络图片

 

自定义我们自己的Request

虽然Volley只提供了StringRequest、JsonRequest和ImageRequest三种返回方式的request,但是我们可以对Volley进行扩展,定义出我们自己的Request

我们可以定义出一个自己的Request继承Volley的Request类,因为Volley的Request是一个抽象类,所以我们需要复写它的两个方法--parseNetworkResponse和deliverResponse,其中parseNetWorkResponse方法是将请求到的数据转换成我们需要的数据后调用response.success方法返回到deliverResponse中,然后deliverResponse方法中调用回调将数据返回到我们调用的地方使用。

例子如下:

1.     public class GsonRequest<T> extends Request<T> {  

2.       

3.         private final Listener<T> mListener;  

4.       

5.         private Gson mGson;  

6.       

7.         private Class<T> mClass;  

8.       

9.         public GsonRequest(int method, String url, Class<T> clazz, Listener<T> listener,  

10.             ErrorListener errorListener) {  

11.          super(method, url, errorListener);  

12.         mGson = new Gson();  

13.          mClass = clazz;  

14.         mListener = listener;  

15.      }  

16.   

17.      public GsonRequest(String url, Class<T> clazz, Listener<T> listener,  

18.             ErrorListener errorListener) {  

19.          this(Method.GET, url, clazz, listener, errorListener);  

20.     }  

21.    

22.     @Override  

23.      protected Response<T> parseNetworkResponse(NetworkResponse response) {  

24.         try {  

25.              String jsonString = new String(response.data,  

26.                     HttpHeaderParser.parseCharset(response.headers));  

27.              return Response.success(mGson.fromJson(jsonString, mClass),  

28.                     HttpHeaderParser.parseCacheHeaders(response));  

29.          } catch (UnsupportedEncodingException e) {  

30.             return Response.error(new ParseError(e));  

31.          }  

32.     }  

33.    

34.     @Override  

35.      protected void deliverResponse(T response) {  

36.         mListener.onResponse(response);  

37.      }  

38.   

39.  }  

使用:其中Weather是根据json串自定义的bean类,我们的GosnRequest直接将Weather返回

1.     GsonRequest<Weather> gsonRequest = new GsonRequest<Weather>(  

2.             "http://www.weather.com.cn/data/sk/101010100.html", Weather.class,  

3.             new Response.Listener<Weather>() {  

4.                 @Override  

5.                 public void onResponse(Weather weather) {  

6.                     WeatherInfo weatherInfo = weather.getWeatherinfo();  

7.                     Log.d("TAG""city is " + weatherInfo.getCity());  

8.                     Log.d("TAG""temp is " + weatherInfo.getTemp());  

9.                     Log.d("TAG""time is " + weatherInfo.getTime());  

10.             }  

11.          }, new Response.ErrorListener() {  

12.             @Override  

13.              public void onErrorResponse(VolleyError error) {  

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

15.              }  

16.         });  

17.  mQueue.add(gsonRequest); 

 

你可能感兴趣的:(volley的用法(数据库网络请求框架 ))