1.在介绍android-async-http之前先和volley框架比较一下
volley更适用于数据交换比较频繁,数据的大小比较小数据量比较多的时候使用
android-async-http更适用于上传或者下载比较大的文件
2.android-async-http的特征
处理异步的http请求,并通过匿名内部类处理回调结果,Http异步请求均位于非UI线程,
不会阻塞UI操作。通过线程池处理并发请求处理文件上传、下载、响应结果自动化打包JSON格式
,自动处理连接断开时请求重连。
3.集成步骤
首先在官网下载点击打开链接导入工程中libs文件夹下并添加到工程路径即可。
在使用的时候还需要添加
compile 'cz.msebera.android:httpclient:4.4.1.1'
发送一个简单的get请求
<span style="font-size: 18px;"> </span><span style="font-size:14px;"> </span><span style="font-size:14px; white-space: pre;"> </span><span style="font-family:SimHei;font-size:12px;">//创建一个请求对象
AsyncHttpClient client = new AsyncHttpClient();
//使用get方法发送一个请求 参数是网络请求的地址,和成功失败的回调
client.get("http://baidu.com/", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int i, Header[] headers, byte[] bytes) {
//bytes 是访问成功返回的数据 打印返回结果
String info = new String(bytes);
System.out.print(info);
}
@Override
public void onFailure(int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes, Throwable throwable) {
//如果失败 打印访问失败的数据
String info = new String(bytes);
System.out.print(info);
}
});</span>
请求参数设置
创建一个RequestParams添加请求参数
<span style="font-size:14px;"></span><pre name="code" class="java"> <span style="font-family: SimHei; font-size: 14px;">//设置请求的参数 原理和hashmap相似</span>
RequestParams requestParams = new RequestParams(); requestParams.put("key","value"); requestParams.put("more","data");
添加一个参数的时候使用
RequestParams requestParams = new RequestParams("key","value");创建一个带参数的post请求
<span style="font-size: 18px;"> </span><span style="font-family:SimHei;font-size:14px;"> <span style="white-space:pre"> </span>//创建一个请求对象
AsyncHttpClient client1 = new AsyncHttpClient();
//设置参数
RequestParams params = new RequestParams();
params.put("参数的key","参数的value值");
//创建post请求
client1.post("post请求的网络地址", params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int i, Header[] headers, byte[] bytes) {
}
@Override
public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {
}
});</span>
现在上传一个文件或者字节数组
//创建一个请求对象
AsyncHttpClient client2 = new AsyncHttpClient();
//在设置参数的时候 可以添加一个流对象
RequestParams params1 = new RequestParams();
//添加一个数组在io流中
// ByteArrayInputStream in = new ByteArrayInputStream("jkjk".getBytes());
// params1.put("key",in,"文件名字");
// 创建一个文件流
// try {
// FileInputStream in = new FileInputStream("文件路径");
// params1.put("key",in,"文件名字");
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// }
//直接将文件传输
//创建一个文件的路径
String path = "文件的路径";
try {
params1.put("key",new File(path),"文件传输类型");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
client2.post(this, "网络地址", params1, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int i, Header[] headers, byte[] bytes) {
}
@Override
public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {
}
});
做文件的下载
使用 FileAsyncHttpResponseHandler 处理器处理
AsyncHttpClient client3 = new AsyncHttpClient();
client3.get("下载地址", new FileAsyncHttpResponseHandler(this) {
//失败
@Override
public void onFailure(int i, Header[] headers, Throwable throwable, File file) {
}
//成功
@Override
public void onSuccess(int i, Header[] headers, File file) {
//打印存储路径
System.out.print(file.getAbsolutePath());
//创建建一个你要存储的路径
String path = "路径";
try {
//获得文件流
InputStream inputStream = new FileInputStream(file);
//创建文件输出流
OutputStream outputStream = new FileOutputStream(path);
int len = -1;
byte[] b = new byte[1024];
while((len=inputStream.read(b))!=-1){
outputStream.write(b,0,len);
outputStream.flush();
}
inputStream.close();
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
android-async-http也可以获取json数据使用的是JsonHttpResponseHandler(在这里不介绍了)
本文对比了android-async-http与volley框架,指出前者更适合处理大文件的上传和下载。android-async-http特性包括异步HTTP请求、非UI线程处理、线程池并发、JSON格式自动处理和断线重连。集成步骤包括下载库、导入项目、配置请求。示例展示了GET请求、参数设置、文件上传和下载的实现。

702

被折叠的 条评论
为什么被折叠?



