Volley的简单使用,和简单二次封装

来源:互联网 发布:农业科技网络书屋 官网 编辑:程序博客网 时间:2024/05/17 04:16

Volley作为Android谷歌使用的第三方网略请求框架,在网略数据请求时有很多优势:

1.通信更快,更简单,开发效率会得到很大提升,开发出来的网略模式性能比较稳定

2.Get、Post网略请求及图片的网络图片的高效率异步请求

3.可以对网略请求进行优先级排序

4.网略请求的缓存:当用户的网略不太好时,Volley自动对网略数据请求做缓存处理

上一段代码简单展示一下

先封装MyAppcaltion类 获得全局的RequestQueue

public classMyApplication extends Application {
      private static RequestQueuerequestQueue;
      private static MyApplicationapplication;
     
      @Override
      public void onCreate() {
           // TODO Auto-generated methodstub
           super.onCreate();
           application = this;
           requestQueue =Volley.newRequestQueue(this);
      }
      public static MyApplicationgetInstance() {
           // TODO Auto-generated methodstub
           return application;
      }
      public static RequestQueuegetRequestQueue(){
          
           return requestQueue;
      }
}

Get请求:在Activity 或者Fragment的代码使用如下

StringRequestrequest = new StringRequest(Method.GET,url, new Listener<String>() {


                 @Override
                 public voidonResponse(String arg0) {
                      // arg0请求成功的数据
                     
                 }
           }, new ErrorListener() {

                 @Override
                 public voidonErrorResponse(VolleyError error) {
                     
                 }
           });

           //需要设置一个标志,在onStop()生命周期里回收
           request.setTag("tag");

           MyApplication.getRequestQueue().add(request);

      在onStop()生命周期里回收StringRequest,很多开发者不重视这个,造成手机内存一直在消耗,

      手机电量也一直在消耗,APP性能因此受损,所以最好回收一下
      protected void onStop() {
           // TODO Auto-generated methodstub
           super.onStop();
           MyApplication.getRequestQueue().cancelAll("tag");
      }

      post请求

      StringRequest request = newStringRequest(Method.POST, url, new Listener<String>() {
                            @Override
                            public voidonResponse(String arg0) {
                                  // TODOAuto-generated method stub
                                                              }
                      }, newErrorListener() {


                            @Override
                            public voidonErrorResponse(VolleyError error) {
                                  // TODOAuto-generated method stub
                            }
                      }){
                 @Override
                 protected Map<String,String> getParams()
                            throwsAuthFailureError {
                      // TODOAuto-generated method stub
                      Map<String,String> params = new HashMap<String, String>();

                      //post请求的参数

                      params.put("xxx","yyy");

                       returnparams;
                 }
           };

           //同Get请求一样,需要设置一个标志,在onStop()生命周期里回收
           request.setTag("tag");

           MyApplication.getRequestQueue().add(request);

封装Volley 请求

public classVolleyRequest {

      public static StringRequeststringRequest;

      /**
       * 封装Volley get请求
       * @param mContext
       * @param url
       * @param tag
       * @param vif
       */
      public static void ReuestGet(ContextmContext,String url,String tag,VolleyInterface vif){
          
           MyApplication.getRequestQueue().cancelAll(tag);
           stringRequest = newStringRequest(url, vif.getListener(), vif.getErrorListener());
           stringRequest.setTag(tag);
           MyApplication.getRequestQueue().add(stringRequest);
           MyApplication.getRequestQueue().start();
          
      }
      /**
       * 封装Volley post请求
       * @param mContext
       * @param url
       * @param tag
       * @param parmas
       * @param vif
       */
     
      public static voidReuestPost(Context mContext,String url,String tag,
                 finalMap<String,String> params,VolleyInterface vif){
           //先回收一下网略请求StringRequest 
           MyApplication.getRequestQueue().cancelAll(tag);
           stringRequest = newStringRequest(url, vif.getListener(),
                      vif.getErrorListener()){
                 @Override
                 protected Map<String,String> getParams() throws AuthFailureError {
                      // TODOAuto-generated method stub
                      return params;
                 }
           };
           stringRequest.setTag(tag);
           MyApplication.getRequestQueue().add(stringRequest);
           MyApplication.getRequestQueue().start();
      }
}

封装抽象类VolleyInterface

public abstractclass VolleyInterface {
     
      public Context context;
      public static Listener<String>listener;
      public static ErrorListener errorListener;
      public VolleyInterface(Contextcontext,Listener<String> listener,ErrorListener errorListener) {
           // TODO Auto-generatedconstructor stub
           this.context = context;
           this.listener = listener;
           this.errorListener =errorListener;
       }
      public Listener<String>getListener(){
           listener = newListener<String>() {


                 @Override
                 public voidonResponse(String arg0) {
                      // TODOAuto-generated method stub
                      onMySuccess(arg0);
                 }
           };
           return listener;
      }
      public ErrorListenergetErrorListener(){
           errorListener = newErrorListener() {


                 @Override
                 public voidonErrorResponse(VolleyError arg0) {
                      // TODOAuto-generated method stub
                      onMyError(arg0);
                 }
           };
           return errorListener;
      }
     
      public abstract voidonMySuccess(String result);
      public abstract voidonMyError(VolleyError error);
     
}

在Activity或者Fragment中数据请求 

VolleyRequest.ReuestGet(this,url,"tag", newVolleyInterface(this,VolleyInterface.listener,VolleyInterface.errorListener) {
                           
                            @Override
                            public voidonMySuccess(String arg0) {
                                  // TODOAuto-generated method stub
                                                        }
                           
                            @Override
                            public voidonMyError(VolleyError error) {
                                  // TODOAuto-generated method stub
                                 
                            }
                      });
这样就特别方便,下一篇文章介绍Volley的图片加载,敬请期待,

如果好的建议、意见,请与本人的QQ2428566234联系,谢谢

 

1 0
原创粉丝点击