android请求网络-第三方库Android-async-http库的使用(5)

前言:

        作为本系列的第五章,本章依旧没有太多的干货,上一篇写了如何使用aah进行post形式的请求,并罗列了一些库中“偷偷摸摸”干的一些事情,aah并没有提供详细的使用文档,难免出现不看源码的情况下踩一些坑的事情。

        本章补充put、patch、delete等请求类型相关的函数原型,简单的看一看库为我们做了什么、将系列补充的完整一点。

        下一篇可能带来一些下载、上传等使用场景。

正文:

put:

首先罗列一下函数原型(重载方法一起放了)

 public RequestHandle put(String url, ResponseHandlerInterface responseHandler);

 public RequestHandle put(String url, RequestParams params, ResponseHandlerInterface responseHandler) ;

 public RequestHandle put(Context context, String url, RequestParams params, ResponseHandlerInterface responseHandler);

 public RequestHandle put(Context context, String url, HttpEntity entity, String contentType, ResponseHandlerInterface responseHandler) ;

 public RequestHandle put(Context context, String url, Header[] headers, HttpEntity entity, String contentType, ResponseHandlerInterface responseHandler);
       

         ok,一共有五个重载方法,在第三篇中,我建议过大家(当然aah的开发团队也这样建议)传递Context对象,这样可以较为方便灵活的取消你的请求。

        和post一样,这里也会将RequestParams对象转HttpEntity,减少使用者代码构建的麻烦程度(毕竟自己再封装一个生产HttpEntity的类也是一定的工作、而且本身就是模块内的功能,这样的设计也是合理的),如果你确实有使用urlparams的需求,在第一章中我们提到建立一个方法类(HttpUtil)简化代码,你可以添加重载并仿照get请求时库内部的逻辑自己实现。

继续看一下具体的逻辑

public RequestHandle put(String url, ResponseHandlerInterface responseHandler) {
        return this.put((Context)null, url, (RequestParams)null, responseHandler);
    }

public RequestHandle put(String url, RequestParams params, ResponseHandlerInterface responseHandler) {
        return this.put((Context)null, url, params, responseHandler);
    }

public RequestHandle put(Context context, String url, RequestParams params, ResponseHandlerInterface responseHandler) {
        return this.put(context, url, this.paramsToEntity(params, responseHandler), (String)null, responseHandler);
    }

public RequestHandle put(Context context, String url, HttpEntity entity, String contentType, ResponseHandlerInterface responseHandler) {
        return this.sendRequest(this.httpClient, this.httpContext, this.addEntityToRequestBase(new HttpPut(this.getURI(url)), entity), contentType, responseHandler, context);
    }

public RequestHandle put(Context context, String url, Header[] headers, HttpEntity entity, String contentType, ResponseHandlerInterface responseHandler) {
       HttpEntityEnclosingRequestBase request = this.addEntityToRequestBase(new HttpPut(this.getURI(url)), entity);
       if(headers != null) {
           request.setHeaders(headers);
       }

        return this.sendRequest(this.httpClient, this.httpContext, request, contentType, responseHandler, context);
    }

可以发现和post部分差别不大,如何构建一个HttpEntity实例在上一篇中说过,不再赘述。


patch:

一般设计用来修改数据

直接看源码

   public RequestHandle patch(String url, ResponseHandlerInterface responseHandler) {
        return this.patch((Context)null, url, (RequestParams)null, responseHandler);
    }

    public RequestHandle patch(String url, RequestParams params, ResponseHandlerInterface responseHandler) {
        return this.patch((Context)null, url, params, responseHandler);
    }

    public RequestHandle patch(Context context, String url, RequestParams params, ResponseHandlerInterface responseHandler) {
        return this.patch(context, url, this.paramsToEntity(params, responseHandler), (String)null, responseHandler);
    }

    public RequestHandle patch(Context context, String url, HttpEntity entity, String contentType, ResponseHandlerInterface responseHandler) {
        return this.sendRequest(this.httpClient, this.httpContext, this.addEntityToRequestBase(new HttpPatch(this.getURI(url)), entity), contentType, responseHandler, context);
    }

    public RequestHandle patch(Context context, String url, Header[] headers, HttpEntity entity, String contentType, ResponseHandlerInterface responseHandler) {
        HttpEntityEnclosingRequestBase request = this.addEntityToRequestBase(new HttpPatch(this.getURI(url)), entity);
        if(headers != null) {
            request.setHeaders(headers);
        }

        return this.sendRequest(this.httpClient, this.httpContext, request, contentType, responseHandler, context);
    }
依旧很类似。


delete:

一般设计来删除数据

看源码:

<span style="font-size:18px;">     public RequestHandle delete(String url, ResponseHandlerInterface responseHandler) {
        return this.delete((Context)null, (String)url, (ResponseHandlerInterface)responseHandler);
    }

    public RequestHandle delete(Context context, String url, ResponseHandlerInterface responseHandler) {
        HttpDelete delete = new HttpDelete(this.getURI(url));
        return this.sendRequest(this.httpClient, this.httpContext, delete, (String)null, responseHandler, context);
    }

    public RequestHandle delete(Context context, String url, Header[] headers, ResponseHandlerInterface responseHandler) {
        HttpDelete delete = new HttpDelete(this.getURI(url));
        if(headers != null) {
            delete.setHeaders(headers);
        }

        return this.sendRequest(this.httpClient, this.httpContext, delete, (String)null, responseHandler, context);
    }

    public void delete(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
        HttpDelete delete = new HttpDelete(getUrlWithQueryString(this.isUrlEncodingEnabled, url, params));
        this.sendRequest(this.httpClient, this.httpContext, delete, (String)null, responseHandler, (Context)null);
    }

    public RequestHandle delete(Context context, String url, Header[] headers, RequestParams params, ResponseHandlerInterface responseHandler) {
        HttpDelete httpDelete = new HttpDelete(getUrlWithQueryString(this.isUrlEncodingEnabled, url, params));
        if(headers != null) {
            httpDelete.setHeaders(headers);
        }

        return this.sendRequest(this.httpClient, this.httpContext, httpDelete, (String)null, responseHandler, context);
    }

    public RequestHandle delete(Context context, String url, HttpEntity entity, String contentType, ResponseHandlerInterface responseHandler) {
        return this.sendRequest(this.httpClient, this.httpContext, this.addEntityToRequestBase(new HttpDelete(URI.create(url).normalize()), entity), contentType, responseHandler, context);
    }
</span>
我们发现库中又帮我们把RequestParams放到了url中。

OK,今天的内容并不出色。

后记:

        这两天我也在想,写这样的博客是否有多少意义,既没有深入源码,也没有精辟的论断。最终觉得还是有意义的,接触编程最困难的总是在对一个东西不了解的时候,从我自学Android开始,也是被无数的不负责博客带进了各种坑。到了一定程度的开发者不会再依赖一些精确的OverView,没有文档看源码也很快。当我发现这个库的时候确实眼前一亮(那是很久之前的事情了),但当时网上只有一些很浅的文章、可以想象每个想要使用这个库的人都要去看源码,看demo,这样的成本个人感觉没有多少意义。如果有一个系列的OverView并介绍一些注意点,很快就能上手使用,看源码就可以放到后面。
        下一篇将会是上传下载,在有精力的情况下会把这个项目拿出来扒一扒,再剥离一些值得学习的设计。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值