loopj.com android-async-http

Android异步Http客户端

用于Android的基于回调的Http客户端库

 

概述

基于Apache的HttpClient库的基于异步回调的Http客户端 。所有请求都是在应用程序的主UI线程之外进行的,但是任何回调逻辑将在相同的线程上执行,因为回调是使用Android的Handler消息传递创建的。你也可以在Service或后台线程中使用它,库会自动识别在哪个上下文中运行。

如果你也在寻找一个伟大的Android崩溃报告服务,我还建议检查我的公司,Bugsnag

特征

  • 使用版本4.3.6的上游HttpClient而不是Android提供的DefaultHttpClient
  • 兼容Android API 23及更高版本
  • 创建异步 HTTP请求,处理匿名回调中的响应
  • HTTP请求发生在UI线程之外
  • 请求使用线程池来限制并发资源使用
  • GET / POST 参数构建器(RequestParams)
  • 多部分文件上传,没有其他第三方库
  • 流式JSON上传,无需其他库
  • 处理循环和相对重定向
  • 微小的大小开销到你的应用程序,只有90kb的一切
  • 针对多斑点移动连接优化的自动智能请求重试
  • 自动gzip响应解码支持超快速请求
  • 二进制协议通信 BinaryHttpResponseHandler
  • 内置响应解析成JSON 与JsonHttpResponseHandler
  • 将响应直接保存到文件中 FileAsyncHttpResponseHandler
  • 持久性cookie存储,将cookie保存到您的应用程序的SharedPreferences
  • 与Jackson JSON,Gson或其他JSON(de)序列化库集成 BaseJsonHttpResponseHandler
  • 支持SAX解析器 SaxAsyncHttpResponseHandler
  • 支持语言和内容编码,而不仅仅是UTF-8

用于顶级应用程序和开发人员的生产

Instagram
Instagram是Android上的第一个照片应用程序,有超过1000万的用户
Pinterest
热门在线插件。整理和分享您喜爱的内容。
前线突击队(Glu游戏)
#1第一人称射击游戏在Android上,由Glu游戏。
Heyzap
社交游戏发现应用程序与数百万的用户
姿势
Pose是分享和发现新风格的第一个时尚应用程序
数以千计的应用程式...
Async HTTP在生产中被数以千计的顶级应用程序使用。

安装和基本使用

使用Gradle buildscript在格式中添加maven依赖

dependencies {
compile 'com.loopj.android:android-async-http:1.4.9'
}

导入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();
String tweetText = firstEvent.getString("text"); // Do something with the response
System.out.println(tweetText);
}
});
}
}

有关更多详细信息,请参阅 AsyncHttpClient, RequestParamsAsyncHttpResponseHandler Javadoc。

持久性Cookie存储 PersistentCookieStore

这个库还包括一个PersistentCookieStoreApache HttpClient CookieStore接口的实现,它自动将Cookie保存到SharedPreferencesAndroid设备上的存储。

如果您要使用Cookie来管理身份验证会话,这是非常有用的,因为即使在关闭并重新打开应用程序后,用户仍将保持登录状态。

首先,创建一个实例AsyncHttpClient

AsyncHttpClient myClient = new AsyncHttpClient();

现在将此客户端的Cookie存储设置为一个新的实例 PersistentCookieStore,使用活动或应用程序上下文构建(通常this就足够了):

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

从服务器收到的任何cookie现在将存储在持久性cookie存储中。

要将自己的Cookie添加到商店,只需构建一个新的Cookie并调用addCookie

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

有关详细信息,请参阅PersistentCookieStore Javadoc 。

用GET添加GET / POST参数 RequestParams

RequestParams类用于可选的GET或POST参数添加到您的要求。RequestParams可以以各种方式建造和建造:

创建空RequestParams并立即添加一些参数:

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

RequestParams为单个参数创建:

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

RequestParams从现有Map的键/值字符串创建:

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

有关更多信息,请参阅RequestParams Javadoc 。

上传文件 RequestParams

RequestParams班还支持multipart文件,如下所示:

添加InputStreamRequestParams上传:

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

向上传的File对象添加RequestParams

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

添加一个字节数组RequestParams到上传:

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

有关更多信息,请参阅RequestParams Javadoc 。

下载二进制数据 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`
}
});

有关详细信息,请参阅FileAsyncHttpResponseHandler Javadoc 。

添加HTTP基本验证凭据

在处理使用HTTP基本访问身份验证请求的API服务时,某些请求可能需要用户名/密码凭据。您可以使用该方法setBasicAuth()提供您的凭据。

为特定请求的任何主机和领域设置用户名/密码。默认情况下,身份验证范围适用于任何主机,端口和领域。

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", , AuthScope.ANY_REALM));
client.get("https://example.com");

有关更多信息,请参阅RequestParams Javadoc 。

在设备上测试

您可以使用提供的示例应用程序在真实设备或仿真器上测试库。示例应用程序实现库的所有重要功能,您可以使用它作为灵感的来源。

示例应用程序的源代码:https://github.com/loopj/android-async-http/tree/master/sample

要运行示例应用程序,请克隆android-async-http github存储库并在其根目录中运行命令:

gradle :sample:installDebug

这将在连接的设备上安装示例应用程序,所有示例都立即工作,如果没有请在https://github.com/loopj/android-async-http/issues上报告错误报告

从源头建设

要从.jar源代码构建一个文件,首先要克隆android-async-http github仓库。然后你必须安装Android SDK和Gradle buildscript,然后运行:

gradle :library:jarRelease

这将在路径中生成一个文件。{repository_root}/library/build/libs/library-1.4.9.jar

报告错误或功能请求

请在此项目的github问题页面上报告任何错误或功能请求:

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

积分和贡献者

詹姆斯·史密斯(https://github.com/loopj
创建者和维护者
Marek Sebera(https://github.com/smarek
维护自1.4.4发布
Noor Dawodhttps://github.com/fineswap
维护自1.4.5发布
Luciano Vitti(https://github.com/xAnubiSx
合作示例应用程序
Jason Choy(https://github.com/jjwchoy
添加了对RequestHandle功能的支持
Micah Fivecoate(https://github.com/m5
主要贡献者,包括原件 RequestParams
Droid Fu项目(https://github.com/kaeppler/droid-fu
灵感和代码更好的http重试
Rafael Sanches(https://blog.rafaelsanches.com
原始SimpleMultipartEntity代码
Anthony Persaud(https://github.com/apersaud
添加了对HTTP基本身份验证请求的支持。
Linden Darling(https://github.com/coreform
增加了对二进制/图像响应的支持

而许多其他人,贡献在许可证头中的每个文件中列出。您还可以通过查看Github上的项目提交,问题和请求来找到贡献者

执照

Android异步Http客户端是在Android友好的Apache许可证版本2.0下发布的。在这里阅读完整的许可证:

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

关于作者

詹姆斯·史密斯,英国企业家和开发商总部设在旧金山。

loopj.com android-async-http的更多相关文章

  1. 【转载】retrofit 2 源码解析

    retrofit 官网地址:http://square.github.io/retrofit/ retrofit GitHub地址:https://github.com/square/retrofit ...

  2. Android开发免费类库和工具集合

    用于Android开发的免费类库和工具集合,按目录分类. Action Bars ActionBarSherlock Extended ActionBar FadingActionBar GlassA ...

  3. Android中常用的优秀开源框架

    Android开源框架库分类,挑选出最常用,最实用的开源项目,本篇主要介绍的是优秀开源框架库和项目,UI个性化控件会独立介绍.UI个性化控件 Index Dependency Injections A ...

  4. 15 个 Android 通用流行框架大全(转)

    1. 缓存 DiskLruCache    Java实现基于LRU的磁盘缓存 2.图片加载 Android Universal Image Loader 一个强大的加载,缓存,展示图片的库 Picas ...

  5. Android 通用流行框架

    原文出处: http://android.jobbole.com/83028/ 1. 缓存 名称 描述 DiskLruCache Java实现基于LRU的磁盘缓存 2.图片加载 名称 描述 Andro ...

  6. 经受时间沉淀的15 个 Android 通用流行框架大全

    1. 缓存 名称描述 DiskLruCache: Java实现基于LRU的磁盘缓存 2.图片加载 名称描述 Android    Universal Image Loader 一个强大的加载,缓存,展 ...

  7. Android通用流行框架大全

    1. 缓存 名称 描述 DiskLruCache Java实现基于LRU的磁盘缓存 2.图片加载 名称 描述 Android Universal Image Loader 一个强大的加载,缓存,展示图 ...

  8. Android常用库

    原文链接:http://www.jianshu.com/p/19368c2cdcaf 系统框架 1. 网络请求 Android Async HTTP Android异步HTTP库 AndroidAsy ...

  9. Android开发-自动更新

    为车机写apk,先实现版本的自动更新. 1.不能再主线程中调用会阻塞ui的功能,需要使用异步方式调用网络,引入Android Async Http框架,需要两个包:android-async-http ...

  10. 60.Android通用流行框架大全

    转载:https://segmentfault.com/a/1190000005073746 Android通用流行框架大全 1. 缓存 名称 描述 DiskLruCache Java实现基于LRU的 ...

随机推荐

  1. MES项目参观交流会

    2016年11月10日,普实软件组织了河南蔚林.江苏正恺.吴通控股.上海锐拓等单位的26位企业家代表,走进科兴电器,开展企业家现场交流活动.企业家们参观了科兴花园式数字化工厂.感受了大数据中心的强大功 ...

  2. 未来工厂——电器行业ERP案例

    江苏科兴电器有限公司位于全国著名的“银杏之乡”泰兴市南首,主要生产35kV及以下电流.电压互感器等系列产品.产品多次经国家及省市技术监督部门抽检合格,广泛应用于国家重点工程.“COSINE”商标荣获泰 ...

  3. java如何在一个范围内产生多个不等的随机数

    import java.util.Random; //随机产生0-max之间num个不重复的整数 public class 产生多个不同随机数 { private static int num,max ...

  4. SpringBoot之旅 -- SpringBoot 项目健康检查与监控

    前言 You build it,You run it, 当我们编写的项目上线后,为了能第一时间知晓该项目是否出现问题,常常对项目进行健康检查及一些指标进行监控. Spring Boot-Actuato ...

  5. PPAPI VS NPAPI

    flash player PPAPI 它的CPU和内存占用率会比较高,主要是因为缓存大多放在内存里而不是硬盘上.   npapi的flash跟ppapi的flash基本是一样的,只不过ppapi插件都 ...

  6. Java 字节流操作

    在java中我们使用输入流来向一个字节序列对象中写入,使用输出流来向输出其内容.C语言中只使用一个File包处理一切文件操作,而在java中却有着60多种流类型,构成了整个流家族.看似庞大的体系结构, ...

  7. 同步 VS 异步

    同步请求资源 请求msdn上的一个页面计算页面大小 static void Main(string[] args) { string url = "https://docs.microsof ...

  8. Unity获取安卓手机运营商,电量,wifi信号强度,本地Toast,获取已安装apk,调用第三方应用,强制自动重启本应用

    一个完整的游戏项目上线需要不断的完善优化,但是到了后期的开发不再仅仅是游戏了,它的复杂度远远大于纯粹的应用开发.首先必须要考虑的就是集成第三方SDK,支付这块渠道商已经帮你我们做好了,只需要按照文档对 ...

  9. IIS 部署ASP.Net, WebAPI, Restful API, PUT/DELETE 报405错解决办法, webapi method not allowed 405

    WebDAV 是超文本传输协议 (HTTP) 的一组扩展,为 Internet 上计算机之间的编辑和文件管理提供了标准.利用这个协议用户可以通过Web进行远程的基本文件操作,如拷贝.移动.删除等.在I ...

  10. Java中实现短信发送

    最近跟着做公司的项目偶然接触到的,顺势把这个给记录下来,给自己梳理一下. 采用引入第三方工具的方式,网上查了半天,发现简单的实现方式便是注册一个中国网建的账号,新建账号的时候会附带赠几条免费短信,彩信 ...