为什么80%的码农都做不了架构师?>>>   

android-async-http是一个强大的第三方开源网络请求库,

官网源码:https://github.com/loopj/android-async-http

官网教程:http://loopj.com/android-async-http/

这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法处理请求结果。

主要类介绍

AsyncHttpRequest

继承自Runnabler,被submit至线程池执行网络请求并发送start,success等消息

AsyncHttpResponseHandler

接收请求结果,一般重写onSuccess及onFailure接收请求成功或失败的消息,还有onStart,onFinish等消息

TextHttpResponseHandler

继承自AsyncHttpResponseHandler,只是重写了AsyncHttpResponseHandler的onSuccess和onFailure方法,将请求结果由byte数组转换为String

JsonHttpResponseHandler

继承自TextHttpResponseHandler,同样是重写onSuccess和onFailure方法,将请求结果由String转换为JSONObject或JSONArray

BaseJsonHttpResponseHandler

继承自TextHttpResponseHandler,是一个泛型类,提供了parseResponse方法,子类需要提供实现,将请求结果解析成需要的类型,子类可以灵活地使用解析方法,可以直接原始解析,使用gson等。

RequestParams

请求参数,可以添加普通的字符串参数,并可添加File,InputStream上传文件

AsyncHttpClient

核心类,使用HttpClient执行网络请求,提供了get,put,post,delete,head等请求方法,使用起来很简单,只需以url及RequestParams调用相应的方法即可,还可以选择性地传入Context,用于取消Content相关的请求,同时必须提供ResponseHandlerInterface(AsyncHttpResponseHandler继承自ResponseHandlerInterface)的实现类,一般为AsyncHttpResponseHandler的子类,AsyncHttpClient内部有一个线程池,当使用AsyncHttpClient执行网络请求时,最终都会调用sendRequest方法,在这个方法内部将请求参数封装成AsyncHttpRequest(继承自Runnable)交由内部的线程池执行。

SyncHttpClient

继承自AsyncHttpClient,同步执行网络请求,AsyncHttpClient把请求封装成AsyncHttpRequest后提交至线程池,SyncHttpClient把请求封装成AsyncHttpRequest后直接调用它的run方法。

服务器端php测试代码:

<?php
$data = array(
'status'=>'success',
'get'=>json_encode($_GET),
'post'=>json_encode($_POST),
'upload'=>json_encode($_FILES)
);
echo json_encode($data);?>

android客户端测试代码:

package com.penngo.http;import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.FileAsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;public class HttpUtil {private static final String BASE_URL = "http://192.168.17.99/";private static AsyncHttpClient client = new AsyncHttpClient();public static void setTimeout(){client.setTimeout(60000);}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);}public static void download(String url, RequestParams params, FileAsyncHttpResponseHandler fileAsyncHttpResponseHandler){client.get(getAbsoluteUrl(url), params, fileAsyncHttpResponseHandler);}private static String getAbsoluteUrl(String relativeUrl) {return BASE_URL + relativeUrl;}
}
package com.penngo.http;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;import com.loopj.android.http.FileAsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import com.loopj.android.http.TextHttpResponseHandler;import org.apache.http.Header;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Locale;public class MainActivity extends Activity {private final static String tag = "MainActivity-->";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button getBtn = (Button)this.findViewById(R.id.getBtn);getBtn.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {testGet();}});Button postBtn = (Button)this.findViewById(R.id.postBtn);postBtn.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {testPost();}});Button upLoadBtn = (Button)this.findViewById(R.id.upLoadBtn);upLoadBtn.setOnClickListener(new View.OnClickListener(){public void onClick(View v){testUploadFile();}});Button downloadBtn = (Button)this.findViewById(R.id.downloadBtn);downloadBtn.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {testDownloadFile();}});}private void testGet(){HttpUtil.get("test/android.php", getParames(), responseHandler);}private RequestParams getParames(){RequestParams params = new RequestParams();params.put("user", "penngo");params.put("psw", "penngo");return params;}private TextHttpResponseHandler responseHandler =  new TextHttpResponseHandler(){@Overridepublic void onStart() {Log.e(tag, "onStart====");}@Overridepublic void onSuccess(int statusCode, Header[] headers, String response) {Log.e(tag, "onSuccess====");StringBuilder builder = new StringBuilder();for (Header h : headers) {String _h = String.format(Locale.US, "%s : %s", h.getName(), h.getValue());builder.append(_h);builder.append("\n");}Log.e(tag, "statusCode:" + statusCode + " headers:" + builder.toString() + " response:" + response);}@Overridepublic void onFailure(int statusCode, Header[] headers, String errorResponse, Throwable e) {Log.e(tag, "onFailure====");StringBuilder builder = new StringBuilder();for (Header h : headers) {String _h = String.format(Locale.US, "%s : %s", h.getName(), h.getValue());builder.append(_h);builder.append("\n");}Log.e(tag, "statusCode:" + statusCode + " headers:" + builder.toString(), e);}@Overridepublic void onRetry(int retryNo) {// called when request is retried}};private void testPost(){HttpUtil.post("test/android.php", getParames(), responseHandler);}private void testUploadFile(){RequestParams params = new RequestParams();try {InputStream is = this.getAssets().open("png/launcher.png");String png = this.getExternalCacheDir().getAbsolutePath() + "/launcher.png";File myFile = new File(png);Log.e(tag, "png====" + png);this.copyToSD(png, "png/launcher.png");params.put("pngFile", myFile, RequestParams.APPLICATION_OCTET_STREAM);} catch(Exception e) {Log.e(tag,"上传失败", e);}HttpUtil.post("test/android.php", params, responseHandler);}private void testDownloadFile(){String mp3 = this.getExternalCacheDir().getAbsolutePath() + "/fa.mp3";File mp3File = new File(mp3);FileAsyncHttpResponseHandler fileHandler = new FileAsyncHttpResponseHandler(mp3File){public void onSuccess(int statusCode, Header[] headers, File file){Log.e(tag, "onSuccess====");StringBuilder builder = new StringBuilder();for (Header h : headers) {String _h = String.format(Locale.US, "%s : %s", h.getName(), h.getValue());builder.append(_h);builder.append("\n");}Log.e(tag, "statusCode:" + statusCode + " headers:" + builder.toString() + " file:" + file.getAbsolutePath());}public void onFailure(int statusCode, Header[] headers, Throwable throwable, File file){}};HttpUtil.download("test/fa.mp3", null, fileHandler);}/*** 复制文件到sdcard*/private void copyToSD(String strOut, String srcInput) throws IOException{InputStream myInput;OutputStream myOutput = new FileOutputStream(strOut);myInput = this.getAssets().open(srcInput);byte[] buffer = new byte[1024];int length = myInput.read(buffer);while(length > 0){myOutput.write(buffer, 0, length);length = myInput.read(buffer);}myOutput.flush();myInput.close();myOutput.close();}
}

执行输出结果:

E/MainActivity-->﹕ onStart====

E/MainActivity-->﹕ onSuccess====

E/MainActivity-->﹕ statusCode:200 headers:Date : Wed, 05 Aug 2015 04:30:00 GMT

Server : Apache/2.2.25 (Win32) mod_ssl/2.2.25 OpenSSL/0.9.8y mod_wsgi/3.3 Python/2.7.3

X-Powered-By : ZendServer 6.3.0

Set-Cookie : ZDEDebuggerPresent=php,phtml,php3; path=/

Keep-Alive : timeout=5, max=100

Connection : Keep-Alive

Transfer-Encoding : chunked

Content-Type : text/html

response:{"status":"success","get":"{\"user\":\"penngo\",\"psw\":\"penngo\"}","post":"[]","upload":"[]"}

E/MainActivity-->﹕ onStart====

E/MainActivity-->﹕ onSuccess====

E/MainActivity-->﹕ statusCode:200 headers:Date : Wed, 05 Aug 2015 04:30:15 GMT

Server : Apache/2.2.25 (Win32) mod_ssl/2.2.25 OpenSSL/0.9.8y mod_wsgi/3.3 Python/2.7.3

X-Powered-By : ZendServer 6.3.0

Set-Cookie : ZDEDebuggerPresent=php,phtml,php3; path=/

Keep-Alive : timeout=5, max=100

Connection : Keep-Alive

Transfer-Encoding : chunked

Content-Type : text/html

response:{"status":"success","get":"[]","post":"{\"user\":\"penngo\",\"psw\":\"penngo\"}","upload":"[]"}

E/MainActivity-->﹕ png====/mnt/sdcard/Android/data/com.penngo.http/cache/launcher.png

E/MainActivity-->﹕ onStart====

E/MainActivity-->﹕ onSuccess====

E/MainActivity-->﹕ statusCode:200 headers:Date : Wed, 05 Aug 2015 04:30:24 GMT

Server : Apache/2.2.25 (Win32) mod_ssl/2.2.25 OpenSSL/0.9.8y mod_wsgi/3.3 Python/2.7.3

X-Powered-By : ZendServer 6.3.0

Set-Cookie : ZDEDebuggerPresent=php,phtml,php3; path=/

Keep-Alive : timeout=5, max=100

Connection : Keep-Alive

Transfer-Encoding : chunked

Content-Type : text/html

response:{"status":"success","get":"[]","post":"[]","upload":"{\"pngFile\":{\"name\":\"launcher.png\",\"type\":\"application\\\/octet-stream\",\"tmp_name\":\"C:\\\\Windows\\\\Temp\\\\phpFDC4.tmp\",\"error\":0,\"size\":3418}}"}

E/MainActivity-->﹕ onSuccess====

E/MainActivity-->﹕ statusCode:200 headers:Date : Wed, 05 Aug 2015 04:30:30 GMT

Server : Apache/2.2.25 (Win32) mod_ssl/2.2.25 OpenSSL/0.9.8y mod_wsgi/3.3 Python/2.7.3

Last-Modified : Fri, 19 Dec 2014 08:10:00 GMT

ETag : "13200000000a25c-4776aa-50a8d3c355700"

Accept-Ranges : bytes

Content-Length : 4683434

Keep-Alive : timeout=5, max=100

Connection : Keep-Alive

Content-Type : audio/mpeg

file:/mnt/sdcard/Android/data/com.penngo.http/cache/fa.mp3

转载于:https://my.oschina.net/penngo/blog/488128

android-async-http使用例子相关推荐

  1. Android SVG动画详细例子

    系列文章目录 Android SVG动画详细例子 老规矩,效果实现有源码 文章目录 系列文章目录 前言 一.看一下实现效果 二.之前例子链接,以及问题. 三.效果的实现 1.SVG图来源:阿里图库 2 ...

  2. android自带蓝牙例子详解

    相关参考网站:http://wenku.baidu.com/view/d901cc2d4b73f242336c5f87.html http://wenku.baidu.com/view/518414b ...

  3. Android 数据库 ANR的例子

    android 开启事务之后,在其他线程是不能进行增删改查操作的.例子如下: 首先,一个线程里面去开启事务,里面对数据库的任何操作都没有. DBAdapter.getInstance().beginT ...

  4. Android被逼学习例子2

    接下来的这个小例子演示当手指在触摸屏上拖动的时候,一个红色的小球更随手指进行移动.不过这个例子大致演示了一下自定义UI组件. 先来看看效果吧: 代码大致如下: AndroidDemoActivity. ...

  5. Android Studio(7)---查找例子

    查找例子 Android Studio提供了一系列代码示例和模板供您用于加速应用开发.浏览示例代码以了解如何为应用程序构建不同的组件.使用模板创建新的应用程序模块,单个活动或其他特定的Android项 ...

  6. android 渲染yuv数据,Android opengl渲染yuv420例子

    [实例简介] Android下使用OpenGL渲染yuv420p图像并显示.例子中提供了两种类型,一种使用GLSurfaceView在onDrawframe中调用native方法绘制,另外一种使用EG ...

  7. Android热修复原理和例子

    概述: 热修复其实很简单,通俗理解就找到有bug的apk和无bug的apk的差异生成一个.apatch(按照AndFix使用)结尾的文件,通过预先固定的通道从网上下载无bug的代码替换有bug的代码, ...

  8. 【转】基于Android Fragment功能的例子

    原文网址:http://blog.csdn.net/eyu8874521/article/details/8252216 通过最近空闲时候对Fragment的学习,尝试着写了一个小Demo,将在开发的 ...

  9. Android NDK JNI 简单例子2

    转载请标明出处: http://blog.csdn.net/michael1112/article/details/55271823 江东橘子的博客 前言 使用Android studio 进行NDK ...

  10. Android NDK JNI 简单例子1 : Android NDK配置和下载

    转载请标明出处: http://blog.csdn.net/michael1112/article/details/55004944 江东橘子的博客 下载和配置NDK: --请使用AS2.2 或更高版 ...

最新文章

  1. 【启发式搜索】[ZOJ1217]Eight
  2. php larval 胖模型,php – 从缓存中获取的Laravel模型访问器 – 性能增强
  3. c#操作Xml(八)
  4. java事件编程_java基础 ---Swing事件编程
  5. MVC之Ajax如影随行
  6. linux能运行安卓模拟器吗,Ubuntu 14.04中使用模拟器运行Android系统
  7. sonar mysql svn_jenkins+sonarqube+svn/git踩过的坑
  8. CMake3.19.2下载
  9. 游戏素材网站推荐!!!
  10. c语言取地址和间接引用
  11. 线程池满Thread pool exhausted排查和解决
  12. 51个赚钱最好的方法(史上最全攻略)
  13. [Other]规范的邮件签名格式及HTML代码
  14. 黄金分割法c语言源代码,黄金分割法-C语言
  15. Ubuntu14.04 安装Firefox flash插件
  16. 【Android】Android外接音源设备之小蜜蜂坑
  17. 小米5 miui9 android8,小米5升级MIUI9速度对比MIUI8:开机就快10秒
  18. 素描嘴巴注意这几个点,轻松画出头像神韵~
  19. 阿里云服务器设置swap交换分区
  20. 计算机的rom是内存的意思,电脑ram和rom是什么意思 电脑内存条是rom还是ram

热门文章

  1. UVA 315 :Network (无向图求割顶)
  2. Hibernate关联关系配置(一对多,一对一,多对多)
  3. 【设计模式】业务代表模式
  4. 数据持久化 技术比较
  5. select报错 spark_使用spark-sql报错 “Metastore contains multiple versions”
  6. Segment Routing — SRv6 — TE 流量工程
  7. 数据中心网络架构 — 云数据中心网络 — 新型叶脊二层网络架构
  8. Openstack组件实现原理 — Glance架构(V1/V2)
  9. Ubuntu 20.04 nfs搭建
  10. selenium+python自动化测试系列(一):登录