Android FinalHttp的使用介绍

在之前的一篇文章中,我们简单的介绍了下FinalBitmap的使用,这一篇文章将继续介绍AFinal开发框架的使用,这一次的主角是FinalHttp。

FinalHttp,顾名思义,就是一个用于实现客户端与服务器之间网络通信的类,这个类主要通过对Apache的HttpClient开源项目进行封装,实现了http、https协议下的”GET”和”Post”两种请求方式,以及put、delete、download等功能,我们主要介绍使用FinalHttp实现与服务器的”GET”和”Post”两种交互方式。

[java] view plain copy

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个固定的线程。而且,

[java] view plain copy

tread.setPriority(Thread.NORM_PRIORITY - 1);  

这句代码将这些线程的优先级设置的比普通线程低,目前不知道是出于何种考虑。

另外,在FinalHttp的构造函数中,进行了很多属性的初始化操作,包括添加请求头、设置超时的时间、设置重试次数等,代码较多,还请读者自己去阅读。

FinalHttp对”GET”和”Post”进行了非常好的封装,所以使用起来非常简单,下面,我们简要的学习一下FinalHttp的使用。

首先,我们可以通过

FinalHttp http =new FinalHttp();

就可以很方便的获取到一个FinalHttp的对象。

如果我们想实现最简单的GET请求,比如我们用GET方式,请求百度的主页,我们可以这样做

[java] view plain copy

public void get(View view) {  
        //这是最简单的get请求,前面是请求地址,不要忘记添加http://  
        //后面是一个回调函数,比较常用的方法有下面两个  
        http.get("http://www.baidu.com", new AjaxCallBack<String>() {  

            //当我们请求失败的时候会被调用,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方法的三种重载,代码如下

[java] view plain copy

//------------------get 请求-----------------------  
    public void get( String url, AjaxCallBack<? extends Object> callBack) {  
        get( url, null, callBack);  
    }  

    public void get( String url, AjaxParams params, AjaxCallBack<? extends Object> callBack) {  
        sendRequest(httpClient, httpContext, new HttpGet(getUrlWithQueryString(url, params)), null, callBack);  
    }  

    public void get( String url, Header[] headers, AjaxParams params, AjaxCallBack<? extends Object> callBack) {  
        HttpUriRequest request = new HttpGet(getUrlWithQueryString(url, params));  
        if(headers != null) request.setHeaders(headers);  
        sendRequest(httpClient, httpContext, request, null, callBack);  
    }  

第二种方式增加了AjaxParams参数,这个参数负责设置get请求的请求值,就是get请求时url地址后面的 &key1=values1&key2=values2这种形式的请求参数的设置,内部其实就是通过Map

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值