Android AndBase框架使用封装好的函数完成框架使用封装好的函数完成Http请求(三)请求(三)
主要介绍了Android AndBase框架使用封装好的函数完成Http请求的相关资料,感兴趣的小伙伴们可以参考一下
本文是针对AndBase框架学习整理的第三篇笔记,想要了解AndBase框架的朋友可以阅读本文,大家共同学习。
学习内容:
1.使用AndBase框架实现无参Http Get请求...
2.使用AndBase框架实现有参Http Post请求...
3.使用AndBase框架实现有参Http Get请求...
AndBase框架为我们提供了一些相关的方法提供给我们使用,用来完成Http网络请求...总体就是对Http请求的一个封装,不过个人认为,网络请求这
一模块更加推荐使用Volley框架..楼主对比了两个框架中的源码...Volley更多的地方是使用抽象方法封装在接口内,然后对外暴露接口,其他类在实现
接口的同时需要实现内部的抽象方法...而AndBase则是使用继承的方式..继承父类..实现类通过重写的方式对封装的方法重写从而进行下一步的操作...
相比二者网络请求的源码,Volley源码的书写还是更胜一筹...Volley是Google推出的,针对的也仅仅是网络请求这一模块...同样AndBase也是非常优
秀的,是国内牛人写的一款重量级框架,涉及的模块非常的广泛,还是非常好用的...
1.使用使用AndBase框架实现无参框架实现无参Http Get请求请求
一般普通的网络请求如果不涉及到数据信息的变化,也就是不涉及一些安全性问题,都可以使用Get方式来完成网络请求...Get请求也是分为有参和无
参的,给我的感觉有参一般可以用于向服务器上传资源数据...先介绍一下无参的Get请求...还是先从源码的地方来看看...
源码的调用方式是先使用AbHttpUtils.get()函数调用...不过这无关紧要...通过这个方法走向AbHttpClient类内部...执行下面这段源码...无论是有参还是无
参..都会调用这个方法..无参的时候第二个参数传递null就行了...
public void get(final String url,final AbRequestParams params,final AbHttpResponseListener responseListener) {
responseListener.setHandler(new ResponderHandler(responseListener));
executorService.submit(new Runnable() {
public void run() {
try {
doGet(url,params,responseListener);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
我们可以看到,这段函数首先通过Handler发送Message...同时开启一个线程池,来提交当前的请求,最后将执行doGet()方法,同时Handler一直对
responseListener的消息进行处理..doGet()方法的源码过程如下
private void doGet(String url,AbRequestParams params,AbHttpResponseListener responseListener){
try {
responseListener.sendStartMessage();
if(!debug && !AbAppUtil.isNetworkAvailable(mContext)){
responseListener.sendFailureMessage(AbConstant.CONNECT_FAILURE_CODE,AbConstant.CONNECTEXCEPTION, new AbAppException(AbConstant.CONNECTEXCEPTION));
return;
}
//HttpGet连接对象
if(params!=null){
url += params.getParamString(); //如果有参,那么获取相关参数...
}
HttpGet httpRequest = new HttpGet(url); //定义连接对象..
BasicHttpParams httpParams = new BasicHttpParams();
// 从连接池中取连接的超时时间,设置为1秒
ConnManagerParams.setTimeout(httpParams, DEFAULT_SOCKET_TIMEOUT);
ConnManagerParams.setMaxConnectionsPerRoute(httpParams, new ConnPerRouteBean(DEFAULT_MAX_CONNECTIONS));
ConnManagerParams.setMaxTotalConnections(httpParams, DEFAULT_MAX_CONNECTIONS);
// 读响应数据的超时时间
HttpConnectionParams.setSoTimeout(httpParams, DEFAULT_SOCKET_TIMEOUT);
HttpConnectionParams.setConnectionTimeout(httpParams, DEFAULT_SOCKET_TIMEOUT);
HttpConnectionParams.setTcpNoDelay(httpParams, true);
HttpConnectionParams.setSocketBufferSize(httpParams, DEFAULT_SOCKET_BUFFER_SIZE);
//设置协议版本...
HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);
HttpProtocolParams.setUserAgent(httpParams, String.format("andbase-http/%s (http://www.418log.org/)", 1.0));
// 设置请求参数
httpRequest.setParams(httpParams);
//取得HttpClient对象
HttpClient httpClient = new DefaultHttpClient();
//请求HttpClient,取得HttpResponse
HttpResponse httpResponse = httpClient.execute(httpRequest);
//请求成功
int statusCode = httpResponse.getStatusLine().getStatusCode();
//取得返回的字符串
HttpEntity mHttpEntity = httpResponse.getEntity();
if (statusCode == HttpStatus.SC_OK){
if(responseListener instanceof AbStringHttpResponseListener){
String content = EntityUtils.toString(mHttpEntity);
((AbStringHttpResponseListener)responseListener).sendSuccessMessage(statusCode, content);