开源项目链接
Android-async-http仓库:Git clone https://github.com/loopj/android-async-http
android-async-http主页:http://loopj.com/android-async-http/
如下就是android-async-http的特性:
-
发送异步http请求,在匿名callback对象中处理response信息;
-
http请求发生在UI(主)线程之外的异步线程中;
-
内部采用线程池来处理并发请求;
-
通过RequestParams类构造GET/POST;
-
内置多部分文件上传,不需要第三方库支持;
-
流式Json上传,不需要额外的库;
-
能处理环行和相对重定向;
-
和你的app大小相比来说,库的size很小,所有的一切只有90kb;
-
在各种各样的移动连接环境中具备自动智能请求重试机制;
-
自动的gzip响应解码;
-
内置多种形式的响应解析,有原生的字节流,string,json对象,甚至可以将response写到文件中;
-
永久的cookie保存,内部实现用的是Android的SharedPreferences;
-
通过BaseJsonHttpResponseHandler和各种json库集成;
-
支持SAX解析器;
-
支持各种语言和content编码,不仅仅是UTF-8;
整体操作流程
android-async-http最简单基础的使用只需如下步骤:
-
创建一个AsyncHttpClient;
-
(可选的)通过RequestParams对象设置请求参数;
-
调用AsyncHttpClient的某个get方法,传递你需要的(成功和失败时)callback接口实现,一般都是匿名内部类,实现了AsyncHttpResponseHandler,类库自己也提供许多现成的response handler,你一般不需要自己创建。
AsyncHttpClient与AsyncHttpResponseHandler基础GET体验
AsyncHttpClient类通常用在android应用程序中创建异步GET, POST, PUT和DELETE HTTP请求,请求参数通过RequestParams实例创建,响应通过重写匿名内部类ResponseHandlerInterface方法处理。
如下代码展示了使用AsyncHttpClient与AsyncHttpResponseHandler的基础操作:
AsyncHttpClient client = new AsyncHttpClient(); client.get("www.baidu.com", new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { } @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { } @Override public void onStart() { super.onStart(); } @Override public void onFinish() { super.onFinish(); } @Override public void onRetry(int retryNo) { super.onRetry(retryNo); } @Override public void onCancel() { super.onCancel(); } @Override public void onProgress(int bytesWritten, int totalSize) { super.onProgress(bytesWritten, totalSize); } });
官方推荐AsyncHttpClient静态实例化的封装
注意:官方推荐使用一个静态的AsyncHttpClient,官方示例代码如下:
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; } }
通过官方这个推荐例子可以发现,我们在用时可以直接通过类名调用需要的请求方法。所以我们可以自己多封装一些不同的请求方法,比如参数不同的方法,下载方法,上传方法等。
RequestParams的基础使用
RequestParams params = new RequestParams(); params.put("username", "yanbober"); params.put("password", "123456"); params.put("email", "yanbobersky@email.com"); /* * Upload a File */ params.put("file_pic", new File("test.jpg")); params.put("file_inputStream", inputStream); params.put("file_bytes", new ByteArrayInputStream(bytes)); /* * url params: "user[first_name]=jesse&user[last_name]=yan" */ Map<String, String> map = new HashMap<String, String>(); map.put("first_name", "jesse"); map.put("last_name", "yan"); params.put("user", map); /* * url params: "what=haha&like=wowo" */ Set<String> set = new HashSet<String>(); set.add("haha"); set.add("wowo"); params.put("what", set); /* * url params: "languages[]=Java&languages[]=C" */ List<String> list = new ArrayList<String>(); list.add("Java"); list.add("C"); params.put("languages", list); /* * url params: "colors[]=blue&colors[]=yellow" */ String[] colors = { "blue", "yellow" }; params.put("colors", colors); /* * url params: "users[][age]=30&users[][gender]=male&users[][age]=25&users[][gender]=female" */ List<Map<String, String>> listOfMaps = new ArrayList<Map<String, String>>(); Map<String, String> user1 = new HashMap<String, String>(); user1.put("age", "30"); user1.put("gender", "male"); Map<String, String> user2 = new HashMap<String, String>(); user2.put("age", "25"); user2.put("gender", "female"); listOfMaps.add(user1); listOfMaps.add(user2); params.put("users", listOfMaps); /* * 使用实例 */ AsyncHttpClient client = new AsyncHttpClient(); client.post("http://localhost:8080/androidtest/", params, responseHandler);
JsonHttpResponseHandler带Json参数的POST
try { JSONObject jsonObject = new JSONObject(); jsonObject.put("username", "ryantang"); StringEntity stringEntity = new StringEntity(jsonObject.toString()); client.post(mContext, "http://api.com/login", stringEntity, "application/json", new JsonHttpResponseHandler(){ @Override public void onSuccess(JSONObject jsonObject) { super.onSuccess(jsonObject); } }); } catch (JSONException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }
BinaryHttpResponseHandler下载文件
client.get("http://download/file/test.java", new BinaryHttpResponseHandler() { @Override public void onSuccess(byte[] arg0) { super.onSuccess(arg0); File file = Environment.getExternalStorageDirectory(); File file2 = new File(file, "down"); file2.mkdir(); file2 = new File(file2, "down_file.jpg"); try { FileOutputStream oStream = new FileOutputStream(file2); oStream.write(arg0); oStream.flush(); oStream.close(); } catch (Exception e) { e.printStackTrace(); Log.i(null, e.toString()); } } });
RequestParams上传文件
File myFile = new File("/sdcard/test.java"); RequestParams params = new RequestParams(); try { params.put("filename", myFile); AsyncHttpClient client = new AsyncHttpClient(); client.post("http://update/server/location/", params, new AsyncHttpResponseHandler(){ @Override public void onSuccess(int statusCode, String content) { super.onSuccess(statusCode, content); } }); } catch(FileNotFoundException e) { e.printStackTrace(); }
PersistentCookieStore持久化存储cookie
官方文档里说PersistentCookieStore类用于实现Apache HttpClient的CookieStore接口,可自动将cookie保存到Android设备的SharedPreferences中,如果你打算使用cookie来管理验证会话,这个非常有用,因为用户可以保持登录状态,不管关闭还是重新打开你的app。
文档里介绍了持久化Cookie的步骤:
-
创建 AsyncHttpClient实例对象;
-
将客户端的cookie保存到PersistentCookieStore实例对象,带有activity或者应用程序context的构造方法;
-
任何从服务器端获取的cookie都会持久化存储到myCookieStore中,添加一个cookie到存储中,只需要构造一个新的cookie对象,并且调用addCookie方法;
下面这个例子就是铁证:
AsyncHttpClient client = new AsyncHttpClient(); PersistentCookieStore cookieStore = new PersistentCookieStore(this); client.setCookieStore(cookieStore); BasicClientCookie newCookie = new BasicClientCookie("name", "value"); newCookie.setVersion(1); newCookie.setDomain("mycompany.com"); newCookie.setPath("/"); cookieStore.addCookie(newCookie);
总结性的唠叨几句
AsyncHttpResponseHandler是一个请求返回处理、成功、失败、开始、完成等自定义的消息的类,如上第一个基础例子中所示。
BinaryHttpResponseHandler是继承AsyncHttpResponseHandler的子类,这是一个字节流返回处理的类,用于处理图片等类。
JsonHttpResponseHandler是继承AsyncHttpResponseHandler的子类,这是一个json请求返回处理服务器与客户端用json交流时使用的类。
AsyncHttpRequest继承自Runnable,是基于线程的子类,用于异步请求类, 通过AsyncHttpResponseHandler回调。
PersistentCookieStore继承自CookieStore,是一个基于CookieStore的子类, 使用HttpClient处理数据,并且使用cookie持久性存储接口。
相关推荐
android-async-http开源框架可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来也很简单,具体详细使用看官网:https://github.com/loopj/android-async-http
"Android-Async-Http"是一个流行的开源框架,专为Android平台设计,用于简化网络请求处理。这个框架的主要目标是让Android开发者能够更高效、更轻松地进行异步HTTP通信,从而获取网络数据或向服务器发送数据。在...
《Android异步HTTP框架——深入理解android-async-http-master》 在移动开发领域,尤其是在Android平台上,网络请求是不可或缺的一部分。高效、稳定的网络通信库能够极大地提升应用的用户体验。"android-async-...
1. **内存管理**:由于Android-Async-Http使用了线程池,开发者需要关注内存占用,确保及时释放不再使用的资源。 2. **网络权限**:确保在AndroidManifest.xml中添加了INTERNET权限,否则请求将无法执行。 3. **...
然而,需要注意的是,尽管Android-async-http框架在过去非常流行,但随着Android的发展,现在推荐使用更现代的库,如Retrofit、Volley或OkHttp,它们提供了更多优化和新特性,如更强大的错误处理、更简洁的API以及对...
《Android异步HTTP框架——android-async-http-1.4.3详解》 在移动开发领域,Android应用程序经常需要与服务器进行数据交互,这通常涉及到网络请求。由于Android系统的设计特性,直接在主线程中执行网络操作会导致...
**Android-Async-Http:一个高效的Android网络框架** Android-Async-Http是专门为Android平台设计的一个轻量级、异步的网络请求库。这个框架极大地简化了在Android应用中进行HTTP请求的操作,允许开发者在后台线程...
android-async-http开源框架可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来也很简单 1.新建项目,去官网下载zip包,解压,打开releases文件,把里面最新的jar包,考入项目工程libs目录下,引入包。 ...
安卓开发中经常使用到的一个框架,使用android-async-http这个库可以大大的简化操作,它是基于Apache’s HttpClient ,所有的请求都是独立在UI主线程之外,通过回调方法处理请求结果,采用android Handler message ...
Android-Async-Http是一个流行的开源库,用于在Android平台上实现异步HTTP请求。这个框架使得开发者可以方便地处理网络通信,避免了主线程被阻塞,提升了应用的用户体验。下面将详细阐述该框架的核心功能、使用方法...
虽然`android-async-http`功能强大,但随着Android平台的发展,现在推荐使用更现代的网络库,如Retrofit、OkHttp等,它们提供了更好的性能和更多的特性,如HTTPS支持、Interceptor机制等。 总结,`android-async-...
在`TestUI`这个文件中,可能包含了使用`android-async-http`框架和`AsyncTask`进行网络请求的示例代码。通过分析和运行这段代码,我们可以更深入地理解这两个组件的使用方法和它们之间的差异。 在实际应用中,`...
在使用Android-async-http框架时,首先需要从其官方网站下载相应的Jar包,并将其复制到Android项目中的libs文件夹内,以便项目能够识别并调用该框架提供的API。 在应用中使用此框架,首先需要创建一个...
《Android异步HTTP库android-async-http-master深度解析》 在Android应用开发中,网络通信是不可或缺的一部分,尤其是在处理用户交互、数据同步等场景时。`android-async-http`是一个非常流行的开源框架,用于简化...
Android-Async-Http库是由Leonardo Uribe创建的,它的主要特点是使用异步处理模型,避免了主线程被阻塞,从而提高了用户体验。在Android应用中,由于UI线程不能长时间执行耗时操作,如网络请求,因此异步处理至关...
Android网络请求库:android-async-http开源框架 之前有一篇描述了客户端请求服务器端的方式—Post的请求方式。今天介绍一个请求服务器的一个开源库—android-async-http库。 1. 概念: 这个网络请求库是基于...
Github上最火的Android开源项之Android-Async-Http。... Android-Async-Http是Android上的一个异步、基于回调的HTTP客户端开发包,建立在Apache的HttpClient库上。 在Android中使用这个异步HttpClient框架非常的方便。