转载请注明出处:明桑Android

这是Android网络框架系列的最后一篇了~~,
文章主要介绍第三方库 android-async-http的使用,之后作为Android网络框架系列的完结,对在开发中如何学习和使用第三方框架做个总结!

1,Android Asynchronous Http Client简介

android-async-http是封装了HttpClient的顶层实现,它所发起的Request全部运行于不同于UI线程的其它线程中,但它回调的处理逻辑和使用Handler发送message处理的回调逻辑一样,你也可以将它运行在Service线程或者background线程中。

特点:

  • 异步HTTP请求,匿名回调响应函数
  • 在其他线程而非UI线程中发送Request
  • Requests使用线程池管理限制并发资源
  • 可以自定义GET/POST参数
  • 多种文件上传方式
  • JSON数据的上传
  • Request重试机制
  • 解析多种数据格式
  • 支持持久化存储Cookie
  • 支持SAX解析
  • 支持多种内容和语言编码格式,不仅仅是UTF-8

更多特性android-async-http

2,Android-async-http的使用

  1. 跟所有第三方库的使用一样,我们需要将其添加进我们的项目:可以直接下载最新.jar包( android-async-http.jar),也可以从github中将其clone到本地:android-async-http
    1. 如果是直接下载的.jar包,将其添加至项目libs文件夹下,并右键jar包,选择将其Add As Library:
    2. 如果是clone的项目,你还是需要将其编译成jar包,然后根据第1步操作添加进项目:以下是编译过程:
      首先进入你clone的android-async-http目录下,然后在命令行执行如下命令
android update project -p ant jar

2.android-async-http的基本用法
我们首选需要创建一个AsyncHttpClient实例,然后用它发起Request

AsyncHttpClietn client=new AsyncHttpClient();    client.get("http://www.baidu.com",new AsyncHttpResponseHandler(){        @Override        public void onStart(){            //在Request发起前调用        }        @Override        public void onSuccess(int statusCode,Header[] headers,byte[] response){            //正确响应时调用,statusCode=200,headers代表响应http头部,response:响应返回值        }        @Override        public void onFailure(int statusCode,Header[] heards,byte[] errorResponse,Throwable e){            //未正确响应时调用:statusCode=401\403\404\...        }        @Override        public void onRetry(int retryNo){            //重试请求时调用        }    });

推荐用法:创建 static Http Client;

跟Volley框架一样,我们应该单独创建一个类,将我能需要的代码初始化,以便于全局持有某些对象。在这里将我们所需要的封装在一个static Client类中,可以根据自己的需求具体编写自定义Client类,具体的使用参考API: AsyncHttpClient, RequestParams and AsyncHttpResponseHandler

public class MyCLient{        private static final String BASE_URL="http://www.baidu.com";        //创建一个static client        private static AsyncHttpClient client=new AsyncHttpClient();        //重写我们所需要的get,post等方法        public static get(String url,RequestParams params,AsyncHttpResonseHandler responseHand){            client.get(url,params,respnseHand)        }        public static post(String url,RequestParams params,aAsyncHttpResponseHandler responseHand){            client.post(url,params,responseHand);        }    }    //然后在需要的地方调用即可,    MyClient.get(url,params,new AsyncHttpResonseHandler(){...});

3.Cookie的存储:通过使用PersistentCookieStore,它实现了HttpClient中CookieStore接口,自动将Cookie存储到本地SharedPerferences中,常用来存储用户登录信息等。

AsyncHttpClient client=new AsyncHttpClient();    PersistentCookieStore cookieStore=new PersistentCookieStore(context);    client.setCookieStore(cookieStore);    //当然你也可以自己将Cookie添加存储到本地,先创建Cookie对象,然后通过addCookie()添加    BasicClientCookie myCookie=new BasicClientCOokie("cookieuser","hh");    myCookie.setViersion(1);    myCookie.setDomain("www.my.com");    myCookie.setPath("/");    client.addCookie(myCookie);

4.为Request添加GET/POST参数:需要用到RequestParams类,
创建方法有以下几种:

RequestParams params=new RequestParams("username","coder");    //或者    RequestParams params=new RequestParams();    params.put("username","coder");    //也可以通过键值对Map对象添加    HashMap<String,String> map=new HashMap<String,String>();    map.put("username","coder");    RequestParams params=new RequestParams(map);    ....    //还记得前面写过的get(),post()方法吗,RequestParams即是它的第二个可选参数    client.get(url,params,new AsyncHttpResponseHandler(){..});

5.通过RequestParams上传文件:上面我们知道了如何试着RequestParams,那么怎么才能上传一个文件呢,可以通过以下三种方式:

通过输入流上传:

    InputStream myInputStream = blah;    RequestParams params = new RequestParams();    params.put("secret_passwords", myInputStream, 

“passwords.txt”);

通过文件对象上传:

    File myFile = new File("/path/to/file.png");    RequestParams params = new RequestParams();    try {        params.put("profile_picture", myFile);    } catch(FileNotFoundException e) {}

通过字节数组上传:

    byte[] myByteArray = blah;    RequestParams params = new RequestParams();    params.put("soundtrack", new ByteArrayInputStream(myByteArray), "she-wolf.mp3");

6.下载二进制文件:通过FileAsyncHttpResponseHandler类可以下载图片等二进制文件

    AsyncHttpClient client=new AsyncHttpClient();    client.get("www.my.com/movies.jpg",new FileAsyncHttpResponseHandler(){        @Override        public void Success(int statusCode,Header[] headers,File response){            //获取文件        }    })

那我们如何发送其他类型的例如Json请求呢,其实观察可以发现只需要:new JsonHttpResponseHandler(){..}

7.HTTP身份验证Request:webservice中常需要进行身份验证,可通过以下两种方式实现:

    AsyncHttpClient client=new AsyncHttpClient();    //    client.setBasicAuth("username","password/token");    client.get("http://www.my.com");    //也可以设置更详细的验证范围    client.setBasicAuth("username","password",new AuthScope("www.my.com",80,AuthScope.ANY_REALM));    client.get("http://www.my.com");

以上即android-async-http 框架的基本用法,不写具体的Demo了,更多内容参见官网提供的API:android-sync-http API

总结:

Android网络框架的学习就告一段落了,主要介绍了Volley、Picasso、android-sync-http三种框架的使用,希望能对正在学习Android网络编程部分的同学有所帮助。

在使用中,我们需要根据自己的需求和各个框架的特点选择自己所需的框架,初期我们掌握基本的使用就可以了,很多时候我们应该去试着研究它们的源码,这样才能在以后的开发中运用自如。

其实几篇文章下来,我们可以发现开发中使用第三方框架基本上无非以下几步

  1. 根据自己的需求去github等网站寻求目前比较流行的框架;
  2. 熟悉你所选定框架的特点和使用场景以及缺陷
  3. 将对应jar包引入项目。
  4. 根据官方示例掌握基本用法。
  5. 多做练习,熟悉使用场景。
  6. 研究源码,改写框架以适应自己的需求。

接下来准备写篇实战的文章,灵活运用以上所学框架我们实现一个简单APP,有兴趣的关注微博或公众号,随时更新~~

参考资料:

Android Asynchronous Http Client

  • 微博: @明桑Android黑历史
  • 邮箱: <13141459344@163.com>
  • 个人主页: 明桑战胜Android汪的黑历史
  • 微信公众号: ITBird

    Android 网络框架 android-async-http_第1张图片

更多相关文章

  1. Android能否在子线程中更新UI呢?
  2. Android多线程之图解Handler Looper MessageQueue Message
  3. Android程序开发的基本框架
  4. android异步任务完成后再执行主线程任务
  5. Android使用线程获取网络图片的方法
  6. android中使用多线程——HandlerThread举例
  7. android 多线程断点下载,listview 模式 开始 暂停等功能
  8. Android与JS交互---内嵌框架iframe

随机推荐

  1. Android 监听返回键|您确定要退出吗
  2. 流程图控件GoJS内置GraphObject类各指数
  3. Mac端完全删除Android Studio
  4. Android 检查当前是否已经连接上 Interne
  5. android 应用程序 集合
  6. android高效读取大图片 防止OOM
  7. android 自定义折线图
  8. API 25 (Android 7.1.1 API) widget.Prog
  9. android技术选型(持续更新中...)
  10. Android NDK开发(一)环境搭建及运行示例