前言:
作为本系列的第五章,本章依旧没有太多的干货,上一篇写了如何使用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并介绍一些注意点,很快就能上手使用,看源码就可以放到后面。
下一篇将会是上传下载,在有精力的情况下会把这个项目拿出来扒一扒,再剥离一些值得学习的设计。