[关闭]
@liter 2015-09-12T14:51:49.000000Z 字数 2258 阅读 3155

Android网络通信框架 LiteHttp2.0 实用教程

litehttp教程 android网络通信教程 android http http最佳实践


    官网: http://def.so

    本系列文章面向各级别尤其中高级android开发者,将展示开源网络通信框架LiteHttp的核心用法,讲解其关键功能的运作原理。
    希望可以让开发者既能熟练使用、修改开源HTTP框架高效完成日常开发任务,又能深入理解litehttp类库本身以及android网络通信相关知识。同时传达了一些框架作者在日常开发中的一些最佳实践,仅作抛砖引玉。

第一节:初始化和初步使用

初始化及单例

初始化LiteHttp需要传入一个HttpConfig的实例来配置各项参数,不传入即表示使用全部使用默认设置。

需要注意的是,一个App仅需要构建一个LiteHttp的实例即可,即单例模式,这样才能最节省系统资源,多个实例并不提升效率。

使用默认配置:

  1. LiteHttp liteHttp = LiteHttp.newApacheHttpClient(null);

简单自定义配置:

  1. HttpConfig config = new HttpConfig(activity);
  2. // set app context
  3. config.setContext(activity);
  4. // custom User-Agent
  5. config.setUserAgent("Mozilla/5.0 (...)");
  6. // connect timeout: 10s, socket timeout: 10s
  7. config.setTimeOut(10000, 10000);
  8. // new with config
  9. LiteHttp liteHttp = LiteHttp.newApacheHttpClient(config);

这个案例示范了context(用于网络状态判断,获取网络类型),User-Agent,连接、读取超时参数配置。
更多的配置项有达23+项之多,非常的灵活,后边会有专门章节详细说明。

初步使用

我们定义一个合法的http地址,如

  1. String url = "http://baidu.com"

发起异步请求:

  1. liteHttp.executeAsync(new StringRequest(url));

异步获取原始byte:

  1. liteHttp.executeAsync(new BytesRequest(url));

异步加载一张位图:

  1. String saveToPath = "/sdcard/a.png";
  2. liteHttp.executeAsync(new BitmapRequest(url,saveToPath));

saveToPath用来输入一个你指定的文件位置,位图将会保存到这里,不传入路径则分两种情况:
- 缓存未启用:仅载入内存,不做文件存储。
- 缓存开启:保存默认位置,默认存储位置和下面[下载文件]的规则一致。

异步下载一个文件:

  1. liteHttp.executeAsync(new FileRequest(url,saveToPath));

saveToPath用来输入一个你指定的文件位置,文件将会保存到这里,传入 null 则保存缓存默认位置。

默认位置规则:
- 如果为请求设置了 Cache-Key,则取其为文件名字
- 反之根据 Url 生成文件名字
文件夹位置在HttpConfig设置。

我们知道了怎么发起异步请求,那么请求是成功还是失败,成功如何获取结果,失败如何获取异常?

处理结果

获取 String 的请求:

  1. liteHttp.executeAsync(new StringRequest(url).setHttpListener(new HttpListener<String>() {
  2. @Override
  3. public void onSuccess(String s, Response<String> response) {
  4. // 成功:主线程回调,反馈一个string
  5. }
  6. @Override
  7. public void onFailure(HttpException e, Response<String> response) {
  8. // 失败:主线程回调,反馈异常
  9. }
  10. }));

下载 File 的请求:

  1. liteHttp.executeAsync(new FileRequest(url,saveToPath).setHttpListener(
  2. new HttpListener<File>(true, true, true) {
  3. @Override
  4. public void onSuccess(File file, Response<File> response) {
  5. }
  6. @Override
  7. public void onFailure(HttpException e, Response<File> response) {
  8. }
  9. @Override
  10. public void onLoading(AbstractRequest<Bitmap> request, long total, long len) {
  11. // 进度通知
  12. }
  13. })
  14. );

其他模式的请求,用法一样,这里不再多举。

值得注意的是 HttpListener 有多个参数可以设置:
HttpListener(boolean runOnUiThread, boolean readingNotify, boolean uploadingNotify)
分别用于设置:
- 开始、成功、失败、重试、上传、下载等所有回调是否在主线程(子线程回调性能更高,但不可操作UI)
- 是否开启下载进度通知
- 是否开启上传进度通知

注意,刚才提到,上传和下载同时是否在主线程被回调取决于第一个参数。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注