Afinal使用详解之FinalHttp

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

你可能感兴趣的:(android开发)