Contents
  1. 1. 2015/10/29 15:31:44
    1. 1.0.1. Volley的基础
  • 2. 2015/10/29 15:34:00
    1. 2.0.1. Async-Http的基础
  • 3. 2015/10/29 15:59:01
    1. 3.0.1. Volley跟Async-http的封装对比
  • 4. 2016/1/21 10:05:11
    1. 4.1. 如何修改已封装好的请求函数
  • 5. 2016/1/21 11:00:44
    1. 5.1. 请求Flag的理解
  • 2015/10/29 15:31:44

    Volley的基础

    compile 'com.mcxiaoke.volley:library:1.0.19'
    
    1. Volley有get 、post等方式请求数据。
    2. Volley可以建立、取消请求队列。
    3. 把请求加入请求队列即可完成请求。

    作用:

    • 封装网络请求类,使请求代码量减少。
    • 大大提高性能(反正很厉害就对了)。

    使用示例:

    1. RequestQueue queue = Volley.newRequestQueue(context)//创建一个队列
    2. StringRequest jr  = new StringRequest(请求方式get/post,请求url,成功监听器,失败监听器)//创建一种请求方式
    3. queue.add(jr);//加入到队列
    

    请求类型:

    • JsonRequest
    • StringRequest
    • ImageRequest
    • JsonArrayRequest
    • JsonObjectRequest
    • ClearCacheRequest

    2015/10/29 15:34:00

    Async-Http的基础

    compile 'com.loopj.android:android-async-http:1.4.8'
    
    1. Async-http有get、post等方式请求数据。
    2. 直接通过AsyncHttpClient对象调用get、post即可完成请求。

    作用:

    • 封装网络请求,使请求代码量减少。
    • 可以用于上传文件、下载文件。

    使用示例:

    1.  AsyncHttpClient client = new AsyncHttpClient();
    2.  client.post(url,一个回调函数);
    

    2015/10/29 15:59:01

    Volley跟Async-http的封装对比

    先看Async-http的封装

    优点:

    • 封装简单
    • 不用自己写请求类

    缺点:

    • 没有解决同一个页面多种请求的问题
        //封装请求类
        public class HttpRequestUtils {
            private static AsyncHttpClient client = new AsyncHttpClient();
            public static void httpGet(String url, HttpCallBack callBack) {
                client.get(url, callBack);
        }
    
            public static void httpPost(String url, RequestParams params, HttpCallBack callBack) {
                client.post(url, params, callBack);
        }
    }
    
    
        //由于请求服务器后,要对返回的数据进行处理,所以要定义两个抽象方法,否则 就会默认执行下述重写的方法onSucess
    
        Http业务的回调接口
        public abstract class HttpCallBack extends AsyncHttpResponseHandler {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody)     {
                    onRequestSuccess(responseBody);
            }
    
            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody,     Throwable error) {
                onRequestFailure(error);
            }
            public abstract void onRequestSuccess(String result);//定义两个抽象函数
            public abstract void onRequestFailure(Throwable error);
    }
    

    下面是Volley的封装

    优点:

    • 可以解决同一页面多种请求

    缺点:

    • 需要自己写请求类
    //Http业务的回调接口
    public interface HttpCallBack {
        public abstract void onSuccess(String result, long flag);
        public abstract void onFailure(String error, long flag);
    }
    
    //封装请求工具类
    public class HttpReqUtils {
        private static HttpReqUtils httpReqUtils;
        private static RequestQueue queue;
        private AtomicLong mHttpCount = new AtomicLong(0); //用于实现同一页面多种请求的标识
    
        //单例模式工具初始化
        public static HttpReqUtils getInstance(Context context) {
            if (httpReqUtils == null) {
            httpReqUtils = new HttpReqUtils();
            queue = Volley.newRequestQueue(context);
        }
        return httpReqUtils;
        }
    
    
        public long asyncPost(String url, final HttpCallBack httpCallBack) {
            final long flag = mHttpCount.incrementAndGet(); //每次请求一次业务,该标识就自增1,该返回标识用于判断是哪个业务做的请求
            StringRequest stringRequest = new StringRequest(Request.Method.POST, url,     new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    httpCallBack.onSuccess(response, flag);
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    String errorMsg = error.getMessage();
                    httpCallBack.onFailure(errorMsg, flag);
                }
            });
            queue.add(stringRequest);
            return flag;
            }
    }
    

    综合上述:

    • 应该封装Volley而不是Async-http
    • Async-http应该用于封装文件上传、下载

    2016/1/21 10:05:11

    如何修改已封装好的请求函数

    背景:

    调用第三方的请求函数,需要调用其回调函数。我想用自己定义的回调函数,该怎么办?

    public static long onGetTodayMoviesMsg(Context context, int cityid, DataCallBack callBack) {
        Parameters params = new Parameters();
        params.add("cityid", cityid);
        JuheData.executeWithAPI(context, 42, TODAY_MOVIE_MSG, JuheData.GET, params, callBack);
        return flag;
    }
    // 第三方的回调函数是DataCallBack,自定义的HttpCallBack
    

    思路:

    1. 自定义一个请求函数,传入自定义的Callback参数。

      public static void CustomExecuteWithApi(Context context, int did, String uri, String method, Parameters params, final HttpCallBack mCallback) {
      DataCallback callback = null;
      JuheData.executeWithAPI(context, did, uri, method, params, callBack);
      }
      
    2. 创建第三方Callback的对象,重新其方法。

        public static void CustomExecuteWithApi(Context context, int did, String uri, String method, Parameters params, final HttpCallBack mCallback) {
        DataCallBack callBack = new DataCallBack() {
            @Override
            public void onSuccess(int i, String s) {
                //此处调用自定义callback的函数
                mCallback.onSuccess(s, FLAG_GET_CITY_MSG);
            }
    
            @Override
            public void onFinish() {
    
            }
    
            @Override
            public void onFailure(int i, String s, Throwable throwable) {
                //此处调用自定义callback的函数
                mCallback.onFailure(s, FLAG_GET_CITY_MSG);
            }
        };
        JuheData.executeWithAPI(context, did, uri, method, params, callBack);
    }
    

    总结:

    • 对第三方请求方法再次封装。

    2016/1/21 11:00:44

    请求Flag的理解

    背景:

    由于一个界面可能会请求多条协议,所以要区分是哪条协议返回的结果,就必须要一个标识来判断。

    实现:

    • 请求协议返回的标识跟实现接口返回的标识是一致的。
    • 可以利用递增函数实现,每个数字代表一个协议。
    private static AtomicLong atomicLong = new AtomicLong(0); //初始化从0开始递增
    

    Contents
    1. 1. 2015/10/29 15:31:44
      1. 1.0.1. Volley的基础
  • 2. 2015/10/29 15:34:00
    1. 2.0.1. Async-Http的基础
  • 3. 2015/10/29 15:59:01
    1. 3.0.1. Volley跟Async-http的封装对比
  • 4. 2016/1/21 10:05:11
    1. 4.1. 如何修改已封装好的请求函数
  • 5. 2016/1/21 11:00:44
    1. 5.1. 请求Flag的理解