Android网络通信android-async-http入门
android-async-http入门
门免费链接分享前:http://pan.baidu.com/s/1mg9SvgO 密码:cgg7
API原文:http://loopj.com/android-async-http/
***Android Asynchronous Http Client
A Callback-Based Http Client Library for Android***
特征
- 全部的requested请求都在UI线程之外发起
- 进行http异步请求时,处理请求响应都在匿名回调函数中
- 请求使用一个线程池来限制并发资源使用情况
- get/post參数构建器 (RequestParams)
- 多文件上传,没有额外的第三方库
- json流上传,没有额外的第三方库
- 在你的应用里仅仅要非常小的开销,全部的文件仅仅要90kb
- 自己主动对超快请求进行gzip响应解码
- 自己主动智能的重试优化请求方便质量不一的手机连接
- 使用FileAsyncHttpResponseHandler把响应直接保存到文件
- 持久化cookie存储。保存cookie到你的应用程序的SharedPreferences
- 集成Jackson JSON,Gson或其它JSON(反)序列化库在BaseJsonHttpResponseHandler中
- SaxAsyncHttpResponseHandler支持SAX解析器
- 支持语言和内容编码,而不仅仅是utf - 8
在此站点下都是使用AAH库开发的应用。翻墙进去逛逛吧:http://www.appbrain.com/stats/libraries/details/loopj_asynchttpclient/android-asynchronous-http-client
安装和基本使用方法
在http://loopj.com/android-async-http/里下载android-async-http-1.4.6.jar(最新版)并导入到project中。
import Http包
import com.loopj.android.http.*;
创建一个新的AsyncHttpClient实例和请求:
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://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客户端静态类訪问器使它easy与Twitter的API相链接:
import com.loopj.android.http.*;
public class TwitterRestClient {
private static final String BASE_URL = "http://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;
}
}
这样之后非常easy在你的代码中使用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);
}
});
}
}
查看AsyncHttpClient,RequestParams,AsyncHttpResponseHandler Javadocs的很多其它的细节
持久化Cookie存储PersistentCookieStore
这个库还包括一个实现Apache HttpClient CookieStore接口的PersistentCookieStore,自己主动在Android设备上使用SharedPreferences存储保存cookie。
假设你想使用cookie来管理身份验证会话这是非常实用的,,由于用户将继续登录即使关闭并重新启动应用程序。
首先,创建一个实例AsyncHttpClient:
AsyncHttpClient myClient = new AsyncHttpClient();
如今将这个客户的cookie存储为PersistentCookieStore的一个新实例,构造一个活动或应用程序上下文(通常这就足够了):
PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
myClient.setCookieStore(myCookieStore);
不论什么从server收到的cookies都会被存储在持久化cookie存储。
加入自己的cookies进行存储,仅仅需构建一个新的cookie和调用addCookie:
BasicClientCookie newCookie = new BasicClientCookie("cookiesare", "awesome");
newCookie.setVersion(1);
newCookie.setDomain("mydomain.com");
newCookie.setPath("/");
myCookieStore.addCookie(newCookie);
加入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");
创建一个存在map键值对的字符串RequestParams:
HashMap<String, String> paramMap = new HashMap<String, String>();
paramMap.put("key", "value");
RequestParams params = new RequestParams(paramMap);
查看RequestParams Javadoc以获取很多其它信息。
加參数RequestParams的文件上传
另外RequestParams类支持多部分文件上传,例如以下所看到的:
加入一个带有inputStream的requestParams參数用来上传:
InputStream myInputStream = blah;
RequestParams params = new RequestParams();
params.put("secret_passwords", myInputStream, "passwords.txt");
加入一个带有文件对象的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("http://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("http://example.com");
你还能够提供更详细的认证范围(推荐)
AsyncHttpClient client = new AsyncHttpClient();
client.setBasicAuth("username","password", new AuthScope("example.com", 80, AuthScope.ANY_REALM));
client.get("http://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
下篇文章将会直接进行代码分析。
转载请注明出处
版权声明:本文博主原创文章,博客,未经同意不得转载。
Android网络通信android-async-http入门的更多相关文章
- Android高性能ORM数据库DBFlow入门
DBFlow,综合了 ActiveAndroid, Schematic, Ollie,Sprinkles 等库的优点.同时不是基于反射,所以性能也是非常高,效率紧跟greenDAO其后.基于注解,使用 ...
- Java基础知识强化之网络编程笔记23:Android网络通信之 Volley(Google开源网络通信库)
联合网上资料学习:http://www.open-open.com/lib/view/open1451223702339.html 一.Volley的介绍 1. Volley简介 在这之前,我们在程序 ...
- Android菜鸟的成长笔记(1)——Android开发环境搭建从入门到精通
原文:Android菜鸟的成长笔记(1)--Android开发环境搭建从入门到精通 今天在博客中看到好多Android的初学者对Android的开发环境的搭建不熟悉而导致不能进行学习,所以我决定自己写 ...
- [置顶]
Xamarin android如何调用百度地图入门示例(一)
在Xamarin android如何调用百度地图呢? 首先我们要区分清楚,百度地图这是一个广泛的概念,很多刚刚接触这个名词"百度地图api",的确是泛泛而谈,我们来看一下百度地图的 ...
- [置顶]
xamarin android toolbar(踩坑完全入门详解)
网上关于toolbar的教程有很多,很多新手,在使用toolbar的时候踩坑实在太多了,不好好总结一下,实在浪费.如果你想学习toolbar,你肯定会去去搜索androd toolbar,既然你能看到 ...
- Android Studio2.0 教程从入门到精通Windows版
系列教程 Android Studio2.0 教程从入门到精通Windows版 - 安装篇Android Studio2.0 教程从入门到精通Windows版 - 入门篇Android Studio2 ...
- Android Studio2.0 教程从入门到精通Windows版 - 入门篇
http://www.open-open.com/lib/view/open1468121363300.html 本文转自:深度开源(open-open.com)原文标题:Android Studio ...
- Android网络通信(8):WiFi Direct
Android网络通信之WiFi Direct 使用Wi-Fi Direct技术可以让具备硬件支持的设备在没有中间接入点的情况下进行直接互联.Android 4.0(API版本14)及以后的系统都提供 ...
- Android网络通信(7):NFC
Android网络通信之 NFC NFC:近场通信,是一种超近距离的无线通信技术.Android从2.3版本的SDK开始支持基于NFC通信.基于NFC的识别和通信可分为三个步骤:1.Android通过 ...
- 发布 Android Library 到 JCenter 从入门到放弃
最近想倒腾一个小小的 UIKit 到 JCenter,为开源社区贡献一点绵薄之力,于是就有了一系列惨无人道的踩坑史.好,接下来,直奔主题,以下是发布流程. 发布到 JCenter 发布到 JCente ...
随机推荐
- 合作编辑室计费系统(一)-SVN常见错误
联合室已完成,在不到一个月的时间,我们的团队:嗤.陈琛.我.这段时间都挺辛苦的.从心里这次合作,真的让我们学习了非常多,学会了接纳和承担. 在我们開始合作机房的时候,社和师哥就给我们做了功课,说你们好 ...
- Spring3.2 HelloWorld
直接上图吧: jar包: 项目文件夹一览: 这里的HelloWeb-servlet,xml 是在WEB-INF 下 HelloController: package com.cqu.tutorial; ...
- OTN&互换amp; P-OTN有效降低100G 网络成本 (两)
OTN互换& P-OTN有效降低100G 网络成本 (两) 在全球范围内.网流量的增长速度是空前的,导致此现象的缘由包含云服务的增长.移动宽带和基于互联网的视频点播服务的增长. Cisco估计 ...
- 可以部署在广域网执行QQ高仿版 GG2014 (源代码)
距上次GG V3.7版本号(可在广域网部署执行的QQ高仿版 -- GG叽叽V3.7.优化视频聊天.控制很多其它相关细节)的公布.已经有50天了,这50天对于GG来说.是一个重大的飞跃. 由于这段时 ...
- 【C语言探索之旅】 第一部分第十课:练习题+习作
内容简介 1.课程大纲 2.第一部分第十课: 练习题+习作 3.第二部分第一课预告: 模块化编程 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三 ...
- Java经典23结构模型的设计模式(三)------附加代理模式、适配器型号、Facade模式的差异
本文介绍了7样的结构模型中的其余2种:轻量级.代理模式. 一.享元模式FlyWeight 享元模式比較简单且重要,在非常多场合都被用到.仅仅只是封装起来了用户看不到.其概念:运用共享内存技术最大限度的 ...
- WindowState注意事项
本文将分析具体WindowState个别关键的成员变量和成员函数. Window #3 Window{20dd178e u0 com.android.mms/com.android.mms.ui.Co ...
- [改变自己wordpress.2]给wordpress加上简单debug sql调试.
或者说,同事. 需要帮她打印出来sql 调试输出到页面sql 在这里,我们使用插件或一个的方式来启动配置文件wordpress的debug 在插件文件夹 wordpress/wp-content/pl ...
- [DEEP LEARNING An MIT Press book in preparation]Deep Learning for AI
动人的DL我们有六个月的时间,积累了一定的经验,实验,也DL有了一些自己的想法和理解.曾经想扩大和加深DL相关方面的一些知识. 然后看到了一个MIT按有关的对出版物DL图书http://www.iro ...
- 在Repeater控件中使用if语句
原文:在Repeater控件中使用if语句 .Afr_ARTICLE_TITLE { font: NORMAL BOLD 14px "Tahoma"; } .Afr_CONTENT ...