Afinal使用详解之FinalHttp
2016-04-18 10:28
459 查看
1.FinalHttp是什么 :顾名思义,就是一个用于实现客户端与服务器之间网络通信的类,这个类主要通过对apache的httpClient开源项目进行封装,实现在http和https协议下的GET和POST两种请求方式,以及put/delete/download等功能.FinalHttp 对 HttpClient再次封装,最简洁的就是增加了许多回调的方法,对Get 和 Post 请求进行了简化。另外一点就是FinalHttp加入线程池操作,默认的Http请求池连接为3。下面是为FinalHttp可配置的操作。
private static final ThreadFactory sThreadFactory = new ThreadFactory() {
private final AtomicInteger mCount = new AtomicInteger(1);
public Thread newThread(Runnable r) {
Thread tread = new Thread(r, “FinalHttp #” + mCount.getAndIncrement());
tread.setPriority(Thread.NORM_PRIORITY - 1);
return tread;
}
};
首先,FinalHttp采用的是线程池的方式,提供对请求的异步加载,默认的是启动3个固定的线程。而且,
tread.setPriority(Thread.NORM_PRIORITY - 1);
这句代码将这些线程的优先级设置的比普通线程低,目前不知道是出于何种考虑。
另外,在FinalHttp的构造函数中,进行了很多属性的初始化操作,包括添加请求头、设置超时的时间、设置重试次数等,代码较多,还请读者自己去阅读。
FinalHttp对 “GET”和”Post”进行了非常好的封装,所以使用起来非常简单,下面,我们简要的学习一下FinalHttp的使用。
FinalHttp finalHttp = new FinalHttp(); //获得httpFinal对象
如果我们想实现最简单的GET请求,比如我们用GET方式,请求百度的主页,我们可以这样做
public void get(View view) {
//这是最简单的get请求,前面是请求地址,不要忘记添加http://
//后面是一个回调函数,比较常用的方法有下面两个
http.get(“http://www.baidu.com“, new AjaxCallBack() {
}
我们可以看到,用FinalHttp实现GET网络请求,我们不需要自己开线程,因为框架已经封装好了,在内部给我们开的线程,实现网络的异步调用。其实不光有get方法,还有一个getSync,这个方法就是没有进行另起线程的请求,所以,如果我们想用getSync这个方法,我们需要自己开启线程,否则在最新版本的主线程中开启网络服务,会抛异常。
当然,这只是最简单的get方法的使用,FinalHttp一共提供了get方法的三种重载,代码如下
public void get( String url, AjaxCallBack
private static final ThreadFactory sThreadFactory = new ThreadFactory() {
private final AtomicInteger mCount = new AtomicInteger(1);
public Thread newThread(Runnable r) {
Thread tread = new Thread(r, “FinalHttp #” + mCount.getAndIncrement());
tread.setPriority(Thread.NORM_PRIORITY - 1);
return tread;
}
};
private static final Executor executor =Executors.newFixedThreadPool(httpThreadCount, sThreadFactory);
首先,FinalHttp采用的是线程池的方式,提供对请求的异步加载,默认的是启动3个固定的线程。而且,
tread.setPriority(Thread.NORM_PRIORITY - 1);
这句代码将这些线程的优先级设置的比普通线程低,目前不知道是出于何种考虑。
另外,在FinalHttp的构造函数中,进行了很多属性的初始化操作,包括添加请求头、设置超时的时间、设置重试次数等,代码较多,还请读者自己去阅读。
FinalHttp对 “GET”和”Post”进行了非常好的封装,所以使用起来非常简单,下面,我们简要的学习一下FinalHttp的使用。
FinalHttp finalHttp = new FinalHttp(); //获得httpFinal对象
finalHttp.addHeader("Accept-Charset", "UTF-8");// 配置http请求头 finalHttp.configCharset("UTF-8"); finalHttp.configCookieStore(null); finalHttp.configRequestExecutionRetryCount(3);// 请求错误重试次数 finalHttp.configSSLSocketFactory(null); finalHttp.configTimeout(5000);// 超时时间 finalHttp.configUserAgent("Mozilla/5.0");// 配置客户端信息
如果我们想实现最简单的GET请求,比如我们用GET方式,请求百度的主页,我们可以这样做
public void get(View view) {
//这是最简单的get请求,前面是请求地址,不要忘记添加http://
//后面是一个回调函数,比较常用的方法有下面两个
http.get(“http://www.baidu.com“, new AjaxCallBack() {
//当我们请求失败的时候会被调用,errorNo是请求失败之后,服务器的错误码,StrMsg则是错误信息 @Override public void onFailure(Throwable t, int errorNo, String strMsg) { super.onFailure(t, errorNo, strMsg); Log.d(TAG, strMsg); } //如果请求成功,则调用这个回调函数,t就是服务器返回的字符串信息 @Override public void onSuccess(String t) { super.onSuccess(t); Log.d(TAG, t); } });
}
我们可以看到,用FinalHttp实现GET网络请求,我们不需要自己开线程,因为框架已经封装好了,在内部给我们开的线程,实现网络的异步调用。其实不光有get方法,还有一个getSync,这个方法就是没有进行另起线程的请求,所以,如果我们想用getSync这个方法,我们需要自己开启线程,否则在最新版本的主线程中开启网络服务,会抛异常。
当然,这只是最简单的get方法的使用,FinalHttp一共提供了get方法的三种重载,代码如下
public void get( String url, AjaxCallBack
相关文章推荐
- HTTPAnalyzer截获SoapUI发送的接口报文
- python网络编程1
- anroid中httpclient异步下载
- 神经网络不可思议的声誉
- TCP/IP(三):传输层TCP与UDP
- 《网络工程师》 Part6 网络互联与互联网
- Android - 简单的无线网络分析APP
- 百度优先收录HTTPS网站?你的网站https还在等什么
- 百度优先收录HTTPS网站?你的网站https还在等什么
- 百度优先收录HTTPS网站?你的网站https还在等什么
- 神经网络学习-问题(二)-scipy未正确安装报DLL找不到的问题
- 理解 Linux 网络栈(2):非虚拟化Linux 环境中的 Segmentation Offloading 技术
- 网络安全
- 网络请求(NSURLSession)
- 网络请求(NSURLConnection)
- 网络数据解析(2) JSON
- 网络数据解析(1) XML
- iOS开发网络篇—数据缓存
- App安全之网络传输安全
- 复杂网络节点重要性评价方法的对比-基于igraph C library