您的位置:首页 > 理论基础 > 计算机网络

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;

}

};

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: