Android Asynchronous Http Client异步网络请求使用

《Zephyr OS 入门与实战》第3章:第一个 Zephyr 程序 - Blinky 实战 解决方法:确认设备树overlay文件已正确加载。返回值,确认驱动初始化状态。 阅读详情

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

1.简介

Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用android-async-http这个库可以大大的简化操作,它是基于Apache’s HttpClient ,所有的请求都是独立在UI主线程之外,通过回调方法处理请求结果,采用android  Handler message 机制传递信息。
2.特性
(1)采用异步http请求,并通过匿名内部类处理回调结果
(2)http请求独立在UI主线程之外
(3)采用线程池来处理并发请求
(4)采用RequestParams类创建GET/POST参数
(5)不需要第三方包即可支持Multipart file文件上传
(6)大小只有25kb
(7)自动为各种移动电话处理连接断开时请求重连
(8)超快的自动gzip响应解码支持
(9)使用BinaryHttpResponseHandler类下载二进制文件(如图片)
(10) 使用JsonHttpResponseHandler类可以自动将响应结果解析为json格式
(11)持久化cookie存储,可以将cookie保存到你的应用程序的SharedPreferences中

3.使用方法(参考官方例举的一个访问Twitter的API的例子,地址:http://loopj.com/android-async-http/)

LoopjRequestClient类

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;

/**
 * @author 付亮
 * 
 */
public class LoopjRequestClient {
	private static final String BASE_URL = "http://xxxxxxx/";

	/**
	 * 定义一个异步网络客户端 ,默认超时20秒, 当超过,默认重连次数为5次 默认最大连接数为10个
	 */
	private static AsyncHttpClient mClient = new AsyncHttpClient();
	static {
		mClient.setTimeout(20000);
	}

	/**
	 * 执行HTTP get请求,带参数
	 * 
	 * @param url
	 *            请求url相对地址
	 * @param params
	 *            请求参数
	 * @param responseHandler
	 *            数据加载句柄对象
	 */
	public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
		mClient.get(getAbsoluteUrl(url), params, responseHandler);
	}

	/**
	 * 执行HTTP get请求,不带参数
	 * 
	 * @param url
	 *            请求url相对地址
	 * 
	 * @param responseHandler
	 *            数据加载句柄对象
	 */
	public static void get(String url, AsyncHttpResponseHandler responseHandler) {
		mClient.get(getAbsoluteUrl(url), responseHandler);
	}

	/**
	 * 执行HTTP post请求,带参数
	 * 
	 * @param url
	 *            请求url相对地址
	 * @param params
	 *            请求参数
	 * @param responseHandler
	 *            数据加载句柄对象
	 */
	public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
		mClient.post(getAbsoluteUrl(url), params, responseHandler);
	}

	/**
	 * 执行HTTP post请求,不带参数
	 * 
	 * @param url
	 *            请求url相对地址
	 * @param responseHandler
	 *            数据加载句柄对象
	 */
	public static void post(String url, AsyncHttpResponseHandler responseHandler) {
		mClient.post(getAbsoluteUrl(url), responseHandler);
	}

	/**
	 * 执行HTTP put请求,带参数
	 * 
	 * @param url
	 *            请求url相对地址
	 * @param params
	 *            请求参数
	 * @param responseHandler
	 *            数据加载句柄对象
	 */
	public static void put(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
		mClient.put(getAbsoluteUrl(url), params, responseHandler);
	}

	/**
	 * 执行HTTP put请求,不带参数
	 * 
	 * @param url
	 *            请求url相对地址
	 * @param responseHandler
	 *            数据加载句柄对象
	 */
	public static void put(String url, AsyncHttpResponseHandler responseHandler) {
		mClient.put(getAbsoluteUrl(url), responseHandler);
	}

	/**
	 * 将请求的url相对地址,拼接为完整的url地址
	 * 
	 * @param relativeUrl
	 *            请求url相对地址
	 * @return 完整的请求url地址
	 */
	private static String getAbsoluteUrl(String relativeUrl) {
		String s = BASE_URL + relativeUrl;
		System.out.println(s);
		return s;
	}
}

5. AsyncHttpClient, RequestParams ,AsyncHttpResponseHandler三个类使用方法

(1)AsyncHttpClient

public class AsyncHttpClient extends java.lang.Object
 该类通常用在android应用程序中创建异步GET, POST, PUT和DELETE HTTP请求,请求参数通过RequestParams实例创建,响应通过重写匿名内部类 ResponseHandlerInterface的方法处理。
例子:
AsyncHttpClient client = new AsyncHttpClient();
 client.get("http://www.google.com", new ResponseHandlerInterface() {
     @Override
     public void onSuccess(String response) {
         System.out.println(response);
     }
 });
(2)RequestParams
public class RequestParams extends java.lang.Object 
用于创建AsyncHttpClient实例中的请求参数(包括字符串或者文件)的集合
例子:
RequestParams params = new RequestParams();
 params.put("username", "james");
 params.put("password", "123456");
 params.put("email", "my@email.com");
 params.put("profile_picture", new File("pic.jpg")); // Upload a File
 params.put("profile_picture2", someInputStream); // Upload an InputStream
 params.put("profile_picture3", new ByteArrayInputStream(someBytes)); // Upload some bytes

 Map<String, String> map = new HashMap<String, String>();
 map.put("first_name", "James");
 map.put("last_name", "Smith");
 params.put("user", map); // url params: "user[first_name]=James&user[last_name]=Smith"

 Set<String> set = new HashSet<String>(); // unordered collection
 set.add("music");
 set.add("art");
 params.put("like", set); // url params: "like=music&like=art"

 List<String> list = new ArrayList<String>(); // Ordered collection
 list.add("Java");
 list.add("C");
 params.put("languages", list); // url params: "languages[]=Java&languages[]=C"

 String[] colors = { "blue", "yellow" }; // Ordered collection
 params.put("colors", colors); // url params: "colors[]=blue&colors[]=yellow"

 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); // url params: "users[][age]=30&users[][gender]=male&users[][age]=25&users[][gender]=female"

 AsyncHttpClient client = new AsyncHttpClient();
 client.post("http://myendpoint.com", params, responseHandler);
(3)public class AsyncHttpResponseHandler extends java.lang.Object implements ResponseHandlerInterface
用于拦截和处理由AsyncHttpClient创建的请求。在匿名类AsyncHttpResponseHandler中的重写 onSuccess(int, org.apache.http.Header[], byte[])方法用于处理响应成功的请求。此外,你也可以重写 onFailure(int, org.apache.http.Header[], byte[], Throwable), onStart(), onFinish(), onRetry() 和onProgress(int, int)方法
例子:
AsyncHttpClient client = new AsyncHttpClient();
 client.get("http://www.google.com", new AsyncHttpResponseHandler() {
     @Override
     public void onStart() {
         // Initiated the request
     }

     @Override
     public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
         // Successfully got a response
     }

     @Override
     public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error)
 {
         // Response failed :(
     }

     @Override
     public void onRetry() {
         // Request was retried
     }

     @Override
     public void onProgress(int bytesWritten, int totalSize) {
         // Progress notification
     }

     @Override
     public void onFinish() {
         // Completed the request (either success or failure)
     }
 });

6.利用PersistentCookieStore持久化存储cookie
PersistentCookieStore类用于实现Apache HttpClient的CookieStore接口,可以自动的将cookie保存到Android设备的SharedPreferences中,如果你打算使用cookie来管理验证会话,这个非常有用,因为用户可以保持登录状态,不管关闭还是重新打开你的app
(1)首先创建 AsyncHttpClient实例对象
AsyncHttpClient myClient = new AsyncHttpClient();
(2)将客户端的cookie保存到PersistentCookieStore实例对象,带有activity或者应用程序context的构造方法
PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
myClient.setCookieStore(myCookieStore);
(3)任何从服务器端获取的cookie都会持久化存储到myCookieStore中,添加一个cookie到存储中,只需要构造一个新的cookie对象,并且调用addCookie方法
BasicClientCookie newCookie = new BasicClientCookie("cookiesare", "awesome");
newCookie.setVersion(1);
newCookie.setDomain("mydomain.com");
newCookie.setPath("/");
myCookieStore.addCookie(newCookie);

7.利用RequestParams上传文件
类RequestParams支持multipart file 文件上传
(1)在RequestParams 对象中添加InputStream用于上传
InputStream myInputStream = blah;
RequestParams params = new RequestParams();
params.put("secret_passwords", myInputStream, "passwords.txt");
(2)添加文件对象用于上传
File myFile = new File("/path/to/file.png");
RequestParams params = new RequestParams();
try {
    params.put("profile_picture", myFile);
} catch(FileNotFoundException e) {}
(3)添加字节数组用于上传
byte[] myByteArray = blah;
RequestParams params = new RequestParams();
params.put("soundtrack", new ByteArrayInputStream(myByteArray), "she-wolf.mp3");

8.用BinaryHttpResponseHandler下载二进制数据
BinaryHttpResponseHandler用于获取二进制数据如图片和其他文件
AsyncHttpClient client = new AsyncHttpClient();
String[] allowedContentTypes = new String[] { "image/png", "image/jpeg" };
client.get("http://example.com/file.png", new BinaryHttpResponseHandler(allowedContentTypes) {
    @Override
    public void onSuccess(byte[] fileData) {
        // Do something with the file
    }
});

参考资料:http://loopj.com/android-async-http/

http://blog.youkuaiyun.com/hil2000/article/details/13949513

http://blog.youkuaiyun.com/mobilexu/article/details/9350467

http://blog.youkuaiyun.com/mobilexu/article/details/16114505

多模态论文笔记——BLIP 本文详细介绍这几年AIGC火爆的隐藏功臣,多模态模型:BLIP。 阅读详情

相关推荐

YOLO-FastestV2从零部署到移动端推理实战手册

本文详细介绍了YOLO-FastestV2从零开始的完整部署流程,涵盖环境搭建、模型训练、格式转换及移动端部署。通过实战步骤,指导开发者将这一轻量级目标检测模型成功部署到Android设备,实现实时推理。文章重点解析了PyTorch到NCNN的模型转换与优化,助力移动端AI应用开发。

l1k9j8h7g6的博客 668

Android Asynchronous Http Client-Android异步网络请求客户端接口

1.简介 Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用android-async-http这个库可以大大的简化操作,它是基于Apache’s HttpClient ,所有的请求都是独立在UI主线程之外,通过回调方法处理请求结果,采用android  Ha

持续学习中 2058

博途WinCC上位机避坑指南:从工控机选型到趋势图优化的完整流程

本文详细解析了博途WinCC上位机开发全流程,从工控机选型到趋势图优化的关键技巧。针对工业自动化场景,提供硬件配置指南、网络优化方案和性能提升策略,帮助工程师避开常见陷阱,实现稳定高效的HMI系统部署。特别强调PC Station与传统触摸屏的选型对比及SIMATIC NET配置优化。

pp12345的博客 278

AsyncHttpClient, RequestParams ,AsyncHttpResponseHandler三个类使用方法

1. AsyncHttpClient, RequestParams ,AsyncHttpResponseHandler三个类使用方法 (1)AsyncHttpClient public class AsyncHttpClient extends java.lang.Object  该类通常用在android应用程序中创建异步GET, POST, PUT和DELETE HTTP请求,请求参数通

woshini_nishiwo的专栏 1620

STM32L476低功耗实战:LPTIM精准定时唤醒STOP2模式与系统级功耗优化

本文深入探讨了STM32L476低功耗实战技巧,重点解析了LPTIM精准定时唤醒STOP2模式的配置与优化。通过详细的步骤指南和实战经验分享,帮助开发者实现系统级功耗优化,特别适合电池供电设备开发。文章涵盖LPTIM1定时器配置、STOP2模式进入流程及常见问题排查,助力将整机功耗降至8.2uA级别。

weixin_33686714的博客 435

手把手教你用若依WMS搭建企业级仓库管理系统(Vue+Spring Boot实战)

本文提供了一份基于若依框架(RuoYi)快速搭建企业级仓库管理系统(WMS)的实战指南。详细介绍了从环境准备、项目初始化到核心功能模块(如入库流程、库存管理看板)深度定制的全过程,并涵盖Lodop打印集成、移动端PWA适配及生产环境Docker部署等高级主题,帮助开发者高效构建稳定可用的WMS系统。

weixin_29015899的博客 563

asynchttpclient.java_AsyncHttpClient, RequestParams ,AsyncHttpResponseHandler三个类使用方法

1. AsyncHttpClient, RequestParams ,AsyncHttpResponseHandler三个类使用方法(1)AsyncHttpClientpublic class AsyncHttpClient extends java.lang.Object该类通常用在android应用程序中创建异步GET, POST, PUT和DELETE HTTP请求,请求参数通过Reques...

weixin_36114355的博客 305

【CANdelaStudio编辑CDD】-21.2-创建OBD诊断$03,$07,$0A和$04服务以及OBD DTC

案例背景(共11页精讲):创建OBD诊断$03,$07,$0A和$04服务;以及OBD DTC。 在《【ISO15031_OBD诊断】-3.1-$03服务Request emission-related diagnostic trouble codes理论部分https://blog.youkuaiyun.com/qfmzhu/article/details/122157513》, 《【ISO15031_OBD诊断】-7.1-$07服务Request emission-related diagnostic trou

「汽车电子助手」的博客 1697

快速Android开发系列网络篇之Android-Async-Http

先来看一下最基本的用法 AsyncHttpClient client = new AsyncHttpClient(); client.get("http://www.google.com", new AsyncHttpResponseHandler() { @Override public void onSuccess(String response) { ...

aehvbew8628的博客 434

32、运算放大器的工作原理与应用

本文详细介绍了运算放大器的工作原理与多种应用场景,涵盖开环与闭环放大器的基本概念、理想运算放大器的特性及其‘黄金规则’。文章深入解析了反相放大器、同相放大器、单位增益跟随器与反相器的配置和增益计算,并探讨了电压比较器及窗口比较器的工作机制。同时提供了运算放大器在实际应用中的选型流程、使用注意事项以及常见故障排查方法,帮助读者全面掌握运算放大器的设计与应用要点。

u5v6w7的博客 163

conda upgrade出现Solving environment:failed CondaValueError Malformed version string invalid chars解决方案

本文主要介绍了conda install出现Solving environment:failed、CondaValueError: Malformed version string invalid character(s),希望能对使用conda的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 步骤一 2.2 步骤二

weixin_43178406的博客 8万+

请教!静态ClientWebSocket对象连接服务端失败被dispose了怎么办?

winform的websocket客户端,先定义了一个静态对象: staticClientWebSocketclient=newClientWebSocket(); client.ConnectAsync(newUri(ServerAddress),CancellationToken.None).Wait(); 问题是,假如第一次连接失败,比如连接地址错误或者其他,client对象似乎就会被dispose掉。 于是重新点连接时就会报错:无法访问已释放的对象。 但是又不可能每次没连接成功...

liuji0517的博客 1056

每周技巧tc 问题处理技巧Teamcenter

(内部)Dataset和Tool相关之2.1——Tool轮询Contents Type和Type Name-赖良顺.docx。(内部)Dataset和Tool相关之3.2——编写Batch和Perl为客户端自动注册相关内容-赖良顺.docx。(内部)Dataset和Tool相关之1.1——Tools和Datasets参数定义-赖良顺.docx。(内部)Dataset和Tool相关之1.2——相关首选项定义及修改-赖良顺.docx。(内部)Dataset和Tool相关之0——概述-赖良顺.docx。

TC技术专栏 1230

asynchttpclient android studio,网络请求框架----AsyncHttpClient的get,post和图片上传服务器...

async-http-client库是一个基于回调函数的Http异步通信客户端Android组件,是在Apache的HttpClient库的基础上开发构建而成的。Eclipse使用:导入android-async-http-1.4.4.jar包http://download.youkuaiyun.com/detail/dickyqie/9662215AndroidStudio: gradle中引入comp...

weixin_39931923的博客 406

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android studio AsyncHttpClient;AsyncHttpResponseHandler;RequestParams; 失效问题

import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.RequestParams; 失效报红是因为版本太老,不在支持, 解决方法: 1.eclipse: libs中加入 org.apache.http.legacy.jar 上面的jar包在:**\android-sdk-windows\p.

ws1836300的博客 584

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android 网络请求-AsyncHttpClient封装(超详细版)

最近捣鼓android,但学习不多,索性完全把android当前端玩了,然后自己写了个后端服务,所以这个中间过程就需要网络请求,找了个三方库,即,下面就是自己简单的封装了下get和post方法,这两个也够我目前业务开发了。

m0_46694056的博客 2638

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

AsyncHttpClient使用总结

最近项目中网络请求使用的AsyncHttpClient,这里简单总结下使用方法,既加强记忆,有能和大家分享下。 1:项目导入 implementation 'com.loopj.android:android-async-http:1.4.9' 2:直接调用 //创建实例 AsyncHttpClient client=new AsyncHttpClient()...

赵航的博客 1万+

HttpClient参数请求为list

类似于这种传参:

sdgames的博客 673

浅论Android网络请求库——android-async-http

在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Instagram和Pinterest的Android版就是用的这个网络请求库。这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通...

weixin_33795833的博客 225

Anroid-async-http封装网络请求框架源码分析

Android-async-http开源项目可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来非常简单, 这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法处理请求结果.      主要特点:处理异步Http请求,并通过匿名内部类处理回调结果,Http异步请求均位于非UI线程,不会阻塞UI操作,

tuke_tuke的博客 3980

android-async-http 数组,Android在AsyncHttpClient框架的基础上定制能直接返回对象数组的框架...

以前听一个大神说过一句借用不知道哪位伟人的话:一个好的方法只有两三行,每个方法只专注一件事。本着这样的精神,我们在拉取网路数据的时候希望能将拉取和解析分开,然而我们也希望有这样一个方法,传入UIL和表单数据后,能直接返回解析好的对象数组。所以就有了这样的一个在AsyncHttpClient框架基础上定制的框架。由我的小伙伴lwz大神,和打下手的MoblieXu完成。项目中用的服务器地址,为自己的小...

weixin_40002336的博客 159

安卓网络编程——Android-async-http(网络通信框架)

之前学习了一款安卓的网络通信框架Volley https://blog.youkuaiyun.com/nishigesb123/article/details/89356776 Volley是谷歌官方推出的,而本文介绍的Android-async-http也是一个网络通信框架(准确点,网络请求框架)不过是第三方的。 之前学习了Apache HTTP Client,说Apache HTTP Client已...

旧日灯塔 1774

Android-Async-Http响应处理与数据解析

Android-Async-Http响应处理与数据解析 【免费下载链接】android-async-http 项目地址: https://gitcode.com/gh_mirrors/and/android-async-http...

gitblog_00140的博客 1029

使用android-async-http来封装Android网络请求框架

目前Android开发中使用的比较多的网络框架有android-async-http,Volley,OkHttp等,Retrofit2.0就是基于OkHttp的,各大网络框架都有各自的优点,今天讲的android-async-http的优点就是api调用简单,学习成本低,jar包的体积小等。  android-async-http是一个基于Apache的HttpClient的异步的Android请求框架

做更好的自己 9335
上一篇: Activity详解(生命周期,finish()、onDestory()和System.exit(0) )
下一篇: js模块化插件开发
我心V飞翔
博客等级 码龄16年 55粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值