您的位置:首页 > 理论基础 > 计算机网络

android开源框架android-async-http详细的使用介绍

2016-01-13 17:59 936 查看
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(在这里不介绍了)


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息