Android Asynchronous Http Client 中文教程

本文为译文,原文链接https://loopj.com/android-async-http/

安卓异步http客户端

概述

这是一个异步的基于回调的Android http客户端,构建于Apache httpclient库上。所有的请求都是独立于UI线程的,与此同时回调会由handler在发起请求的线程中执行。你也可以在后台线程和服务中使用它,这个库会自动识别它的运行环境。

特点

异步请求,回调处理。

不会阻塞UI线程。

使用线程池来负担并发请求。

GET/POST参数构建。

文件分部上传(不需要其它库的支持)。

流化上传JSON(不需要其它库的支持)

处理循环和相关的重定向。

包大小只有90kb

自动智能请求重试,对不稳定的移动链接而优化。

自动使用gzip响应编码,以支持超快请求。

二进制的通讯协议,使用BinaryHttpResponseHandler。

内建相应解析为JSOn的机制,使用JsonHttpResponseHandler。

直接保存相应,使用FileAsyncHttpResponseHandler。

持久的cookie存储,保存在SharedPreferences中。

集成 Jackson JSON,Gson以及其它JSON系列框架,通过使用BaseJsonHttpResponseHandler。

支持SAX解析,通过使用SaxAsyncHttpResponseHandler。

支持语言和内容的编码,不仅仅是UTF-8。

使用本库的高端App和开发者

Instagram

Pinterest

FrontlineCommando (Glu Games)

Heyzap

Pose

Thousandsmore apps…

安装和基本使用

添加maven依赖使用gradle构建。

dependencies {

compile ‘com.loopj.android:android-async-http:1.4.8‘

}

导入http包

import com.loopj.android.http.*;

创建一个新的AsyncHttpClient 实例,并发送请求:

AsyncHttpClient client = new AsyncHttpClient();
client.get("https://www.google.com", new AsyncHttpResponseHandler() {
 
    @Override
    public void onStart() {
        // called before request is started
    }
 
    @Override
    public void onSuccess(int statusCode, Header[] headers, byte[] response) {
        // called when response HTTP status is "200 OK"
    }
 
    @Override
    public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
        // called when response HTTP status is "4XX" (eg. 401, 403, 404)
    }
 
    @Override
    public void onRetry(int retryNo) {
        // called when request is retried
          }
});

推荐用法:创建一个静态的http客户端

在这个例子中,我们将创建一个http客户端,使用静态的访问器,使我们与Twitter的API的通信更容易。

import com.loopj.android.http.*;
 
public class TwitterRestClient {
  private static final String BASE_URL = "https://api.twitter.com/1/";
 
  private static AsyncHttpClient client = new AsyncHttpClient();
 
  public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
      client.get(getAbsoluteUrl(url), params, responseHandler);
  }
 
  public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
      client.post(getAbsoluteUrl(url), params, responseHandler);
  }
 
  private static String getAbsoluteUrl(String relativeUrl) {
      return BASE_URL + relativeUrl;
  }
}

这样话,你后面在使用Twitter的api就很容易了:

import org.json.*;
import com.loopj.android.http.*;
 
class TwitterRestClientUsage {
    public void getPublicTimeline() throws JSONException {
        TwitterRestClient.get("statuses/public_timeline.json", null, new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                // If the response is JSONObject instead of expected JSONArray
            }
            
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONArray timeline) {
                // Pull out the first event on the public timeline
                JSONObject firstEvent = timeline.get(0);
                String tweetText = firstEvent.getString("text");
 
                // Do something with the response
                System.out.println(tweetText);
            }
        });
    }
}

查看AsyncHttpClientRequestParams 和AsyncHttpResponseHandler的java文档来了解更多。

持久的cookie存储,使用PersistentCookieStore

这个库也包含了一个持久的cookie存储功能,使用了apachehtpclient cookiestore接口,自动的存储cookies到sharedpreferences。

这个特别有用,当你想使用cookies来管理带你的鉴权会话,因为用户在退出或者重新打开你的app时,都可以保持登录状态。

第一步,建立一个AsyncHttpClient的实例:

AsyncHttpClient myClient = new AsyncHttpClient();

使用activity的context或者application的context来构建这个客户端的cookies的PersistentCookieStore实例。

PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
myClient.setCookieStore(myCookieStore);

现在,任何从服务端获得的cookies将会持久的存储。

添加你自己的cookies,只要构建一个cookies然后调用addcookie。

BasicClientCookie newCookie = new BasicClientCookie("cookiesare", "awesome");
newCookie.setVersion(1);
newCookie.setDomain("mydomain.com");
newCookie.setPath("/");
myCookieStore.addCookie(newCookie);

PersistentCookieStoreJavadoc 获得更多信息。

添加GET/POST参数,使用RequestParams

你的GET或者POST请求都可以添加参数。RequestParams 可以以下几种方式构建:

创建空的参数集并添加参数:

RequestParams params = new RequestParams();
params.put("key", "value");
params.put("more", "data");

创建单参数的RequestParams :

RequestParams params = new RequestParams("single", "value");

从已有的Map中创建参数集:

HashMap<String, String> paramMap = new HashMap<String, String>();
paramMap.put("key", "value");
RequestParams params = new RequestParams(paramMap);

RequestParamsJavadoc 了解更多。

使用参数上传文件

参数集支持分部上传文件,如下:

添加输入流到参数来上传:

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");

RequestParamsJavadoc 了解更多。

下载二进制数据使用FileAsyncHttpResponseHandler

FileAsyncHttpResponseHandler 可以用来下载二进制数据比如图片和其它文件。例子:

AsyncHttpClient client = new AsyncHttpClient();
client.get("https://example.com/file.png", new FileAsyncHttpResponseHandler(/* Context */ this) {
    @Override
    public void onSuccess(int statusCode, Header[] headers, File response) {
        // Do something with the file `response`
    }
});

FileAsyncHttpResponseHandlerJavadoc 了解更多。

添加HTTP基本鉴权证书

一些API服务可能要求HTTP基本访问认证,因此可能需要给请求提供用户名/密码来认证。使用setBasicAuth()来提供认证。

对特定请求设置 username/password对任何主机和域名,默认的,认证对任何主机域名和端口都起作用。

AsyncHttpClient client = new AsyncHttpClient();
client.setBasicAuth("username","password/token");
client.get("https://example.com");

推荐,你也可以提供一个更详细的鉴权范围。

AsyncHttpClient client = new AsyncHttpClient();
client.setBasicAuth("username","password", new AuthScope("example.com", 80, AuthScope.ANY_REALM));
client.get("https://example.com");

看 RequestParams Javadoc 了解更多。

在设备上测试

你可以在真机或者模拟器上测试这个库,使用提供的例子程序。例子程序实现了所有的重要的库功能。你可以把它们当作实际代码的灵感。

例子程序:https://github.com/loopj/android-async-http/tree/master/sample

为了运行例子,从android-async-http的github库上克隆项目。并且在root下运行如下命令:

gradle :sample:installDebug

这个命令会安装例子程序在链接的机器上,所有的例子都可以快速的运行,如果不行,请在https://github.com/loopj/android-async-http/issues提交问题。

从源码构建

首先克隆项目,然后安装Android sdk 和 gradle,然后执行:

gradle :library:jarRelease

将会产生目标文件: {repository_root}/library/build/libs/library-1.4.8.jar.

报告bug和特性需求

https://github.com/loopj/android-async-http/issues

工作人员和贡献者

James Smith (https://github.com/loopj)

Creator and Maintainer

Marek Sebera (https://github.com/smarek)

Maintainer since 1.4.4 release

Noor Dawod (https://github.com/fineswap)

Maintainer since 1.4.5 release

Luciano Vitti (https://github.com/xAnubiSx)

Collaborated on Sample Application

Jason Choy (https://github.com/jjwchoy)

Added support for RequestHandle feature

Micah Fivecoate (https://github.com/m5)

Major Contributor,including the original RequestParams

The Droid FuProject (https://github.com/kaeppler/droid-fu)

Inspiration and code for better httpretries

Rafael Sanches (https://blog.rafaelsanches.com)

Original SimpleMultipartEntity code

Anthony Persaud (https://github.com/apersaud)

Added support for HTTP BasicAuthentication requests.

Linden Darling (https://github.com/coreform)

Added support for binary/image responses

许可证

ApacheLicense, Version 2.0.

https://www.apache.org/licenses/LICENSE-2.0

关于作者

James Smith, Britishentrepreneur and developer based in San Francisco.

I‘m the co-founder of Bugsnag with Simon Maynard,
andfrom 2009 to 2012 I led up the product team as CTO of Heyzap.

Follow @loopj

本文下载

http://download.csdn.net/detail/zhounanzhaode/8924505

 

时间: 2024-10-29 00:30:27

Android Asynchronous Http Client 中文教程的相关文章

Android Asynchronous Http Client

Features Make asynchronous HTTP requests, handle responses in anonymous callbacks HTTP requests happen outside the UI thread Requests use a threadpool to cap concurrent resource usage GET/POST params builder (RequestParams) Multipart file uploads wit

Android官方Media Playback中文教程

此文参照 android developer API Guides https://developer.android.com/guide/topics/media/mediaplayer.html Media Playback(媒体播放) Android 多媒体框架能够支持多种普通媒体类型,所以我们很容易的整合音频,视频,图片到我们的应用中来.这些多媒体的资源可以是本地文件系统上的,也可以是网络上的.在android中播放音频视频使用的都是MediaPlayer apis. 这篇文档会向我们展

Android Asynchronous Http Client--Android 开源的网络异步加载类

整理Android Asynchronous Http Client的使用 Android Asynchronous Http Client(AHC) 一个回调式的Android网络请求库 概括: AHC是基于Apache的HttpClient 库,所有的网络请求过程在UI线程之外进行,而回调是在Handler里面处理.也可以再Service或者后台程序里面使用,这个库会自动识别并在相应的Context进行处理. 特点: 异步发送HTTP请求,在回调函数中处理响应 HTTP请求过程不在UI线程进

【转】Android Studio安装配置学习教程指南 下载和安装--不错

背景 相信大家对Android Studio已经不陌生了,Android Studio是Google于2013 I/O大会针对Android开发推出的新的开发工具,目前很多开源项目都已经在采用,Google的更新速度也很快,明显能感觉到这是Android开发的未来,那么我们还有什么理由不去拥抱未来呢? 虽然推出了很久,但是国内貌似普及的程度并不高,鉴于很多朋友求studio的详细教程,那么今天我就手把手教大家下载.安装.使用,Studio之路从这里开始. Android Studio VS Ec

[Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程

本文转载自:[Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程 1 前言 经过3天奋战,终于在Ubuntu 16.04上把Android 6.0的源码编译出来了,各种配置,各种error,各种爬坑,特写此博客记录爬坑经历.先上图,Ubuntu上编译完后成功运行模拟器,如图: 2 编译环境 UbuntuKylin 16.04 LTS Android 6.0_r1 Open JDK 7 3 准备工作 (1) 下载android 6.0源码.

Netty4.x中文教程系列(二) Hello World !&lt;转&gt;

在中国程序界.我们都是学着Hello World !慢慢成长起来的.逐渐从一无所知到熟悉精通的. 第二章就从Hello World 开始讲述Netty的中文教程. 首先创建一个Java项目.引入一个Netty 框架的包.这个步骤我在本系列教程的后面就不在重复了. 先上一张我示例的项目工程图给大家看一下: 1.下载并为项目添加Netty框架 Netty的包大家可以从Netty官网:http://netty.io/downloads.html 下载 如图所示: Netty提供了三个主要版本的框架包给

ionic中文教程

ionic(ionic framework)是款接近原生的Html5移动App开发框架,会html css js就可以开发app,创建精彩的手机app应用,从ionic中文教程开始. 利用熟悉的技术(html5 css js)不需要重新再学习新技术,采用原有的web技术就可以创建跨平台的移动app. ionic 是目前最具潜力的一款 HTML5 手机应用混合开发开发框架.通过 SASS 构建应用程序,它提供了通用的 UI 标签和css样式风格来帮助开发者开发强大的应用.ionic使用 JavaS

Android Studio下载及使用教程(转载)

(一)下载及相关问题解决: Android Studio 下载地址,目前最新可下载地址,尽量使用下载工具. Android Studio正式发布,给Android开发者带来了不小的惊喜.但是下载地址却不给力,国内似乎无法正常下载.这里我们在网盘上传了,可以尽情下载了. Android Studio官方网站地址:http://developer.android.com/sdk/installing/studio.html 第一步:Android Studio下载地址: Unix/Linux:and

【转】Android Studio-1.2版本设置教程

如果重新安装Android Studio的话要重新配置风格选项啥的,这篇是个很好的教程,原文链接:http://blog.csdn.net/skykingf/article/details/45485115 Android Studio-1.2版本设置教程 转自 http://licheetec.com/2015/05/02/android-studio-settings/ 这两天Google更新了Android Studio 1.2正式版,新版本的设置界面大变面,设置条目较旧版本进行了归类,不