Android平台下轻量级http网络传输库
更新时间:2016年01月15日 15:06:36 作者:rohsuton
这篇文章主要介绍了Android平台下轻量级http网络传输库的相关资料,需要的朋友可以参考下
AsyncHttpHelp是一个android平台下基于httpclient开发的HTTP网络请求工具。
优点
- 功能齐全,提供常用的http网络访问接口。
- 轻量级,无任何第三方库依赖,库大小为90K左右。
- 定制化,自定义json解析库,支持请求参数,返回内容预处理。
- 易用性,简单易用,只需几行代码即可完成请求,可随意设置cookie、http头部等信息。
功能
1、普通get请求
2、普通post请求
3、Form表单提交数据
4、二进制数据传输
5、json格式内容传输(json字符串自动转java对象,java对象自动转json字符串)
6、普通文件上传/下载
7、断点上传/下载
8、分块上传文件
9、session保持
10、自定义cookie、http头部信息等
11、取消请求
12、自定义json解析器
13、请求内容,返回内容预处理
14、设置请求结果是否在UI线程执行
测试示例
用法示例
GET请求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
AsyncHttpRequest request = new AsyncHttpUtil.Builder() .setCallable( new SimpleRequestCallable() { @Override public void onFailed( int errorCode, String errorMsg) { //请求失败 } @Override public void onSuccess(String responseInfo) { //请求成功 } }) .build().get(); |
GET请求(返回结果为JSON,自动转换成JAVA对象)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
AsyncHttpRequest request = new AsyncHttpUtil.Builder() .setResponseClass(Response. class ) //返回的json对象类型,自动转换改类的对象 .setJsonResponseInterceptor( new JsonResponseInterceptor<Response>() { //返回结果拦截器,方便自定义json解析器以及对返回结果作简单预处理。 @Override public Response convertJsonToObj(String responseStr, Class<Response> mResponseClass) { return new Gson().fromJson(responseStr, mResponseClass); } @Override public boolean checkResponse(Response response) { //可以根据返回的结果判定该请求是否成功,如果返回true,则在callable中调用onSuccess回调方法,为false时调用onFailed回调方法 if (response.getServerResult().getResultCode() == 0 ){ return true ; } setErrorCode(AsyncHttpExceptionCode.defaultExceptionCode.getErrorCode()); setErrorMsg(response.getServerResult().getResultMessage()); return false ; } }) .setCallable( new JsonRequestCallable<Response>() { //回调 @Override public void onFailed( int errorCode, String errorMsg) { //请求失败 } @Override public void onSuccess(Response responseInfo) { //请求成功 } }) .build().get(); |
POST请求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
AsyncHttpRequest request = new AsyncHttpUtil.Builder() .setStrBody( "body内容" ) //post内容 .setCallable( new SimpleRequestCallable() { @Override public void onFailed( int errorCode, String errorMsg) { //请求失败 } @Override public void onSuccess(String responseInfo) { //请求成功 } }) .build().post(); |
POST请求(模拟Form表单)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
AsyncHttpRequest request = new AsyncHttpUtil.Builder() .addFormData( "a" , "1" ) //设置form表单数据,也可以调用setFormDatas方法 .addFormData( "b" , "luoxudong" ) .setCallable( new SimpleRequestCallable() { @Override public void onFailed( int errorCode, String errorMsg) { //请求失败 } @Override public void onSuccess(String responseInfo) { //请求成功 } }) .build().post(); |
POST请求(内容为二进制数据)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
AsyncHttpRequest request = new AsyncHttpUtil.Builder() .setBinaryBody( new byte []{ 1 , 2 , 3 , 4 , 5 }) .setCallable( new BinaryRequestCallable() { @Override public void onFailed( int errorCode, String errorMsg) { //请求失败 } @Override public void onSuccess( byte [] buffer) { //请求成功 } }) .build().post(); |
POST请求(JSON字符串自动转换对象)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
List<String> list = new ArrayList<String>(); list.add( "item1" ); list.add( "item2" ); Request req = new Request(); req.setKey1( "value1" ); req.setKey2( 1 ); req.setKey3( true ); req.setKey4(list); AsyncHttpRequest request = new AsyncHttpUtil.Builder() .setRequestObj(req) //json格式请求内容 .setJsonRequestInterceptor( new JsonRequestInterceptor() { //请求数据拦截器,自定义json解析器 @Override public String convertJsonToObj(Object requestObj) { return new Gson().toJson(requestObj); } }) .setResponseClass(Response. class ) .setJsonResponseInterceptor( new JsonResponseInterceptor<Response>() { //返回结果拦截器,方便自定义json解析器以及对返回结果作简单预处理。 @Override public Response convertJsonToObj(String responseStr, Class<Response> mResponseClass) { return new Gson().fromJson(responseStr, mResponseClass); } @Override public boolean checkResponse(Response response) { if (response.getServerResult().getResultCode() == 0 ){ return true ; } setErrorCode(AsyncHttpExceptionCode.defaultExceptionCode.getErrorCode()); setErrorMsg(response.getServerResult().getResultMessage()); return false ; } }) .setCallable( new JsonRequestCallable<Response>() { @Override public void onFailed( int errorCode, String errorMsg) { //请求失败 } @Override public void onSuccess(Response responseInfo) { //请求成功 } }) .build().post(); |
普通下载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
AsyncHttpRequest request = new AsyncHttpUtil.Builder() .setDownloadFileDir( "/sdcard" ) //文件本地保存路径 .setDownloadfileName( "fund.apk" ) //文件名称 .setCallable( new DownloadRequestCallable() { @Override public void onFailed( int errorCode, String errorMsg) { //下载失败 } @Override public void onTransfering( long totalLength, long transferedLength) { //下载进度 } @Override public void onSuccess(String responseInfo) { //下载完成 } }) .build().download(); |
断点下载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
AsyncHttpRequest request = new AsyncHttpUtil.Builder() .setDownloadFileDir( "/sdcard" ) //文件本地保存路径 .setDownloadfileName( "fund.apk.temp" ) //文件名称 .setFileStartPos( 1000 ) //设置续下载开始位置 .setCallable( new DownloadRequestCallable() { @Override public void onFailed( int errorCode, String errorMsg) { //下载失败 } @Override public void onTransfering( long totalLength, long transferedLength) { //下载进度 } @Override public void onSuccess(String responseInfo) { //下载完成 } }) .build().download(); |
普通上传
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
AsyncHttpRequest request = new AsyncHttpUtil.Builder() .addUploadFile( "file" , new File( "/sdcard/Fund.apk" )) //添加文件,也可以调用setFileWrappers方法,同时添加多个文件 .addUploadFile( "file1" , new File( "/sdcard/wifi_config.log" )) .addFormData( "md5" , "aadfsdf" ) //添加form参数 .setCallable( new UploadRequestCallable() { @Override public void onFailed( int errorCode, String errorMsg) { //上传失败 } @Override public void onTransfering(String name, long totalLength, long transferedLength) { //上传进度 } @Override public void onTransferSuc(String name) { //文件name上传完成 } @Override public void onSuccess(String responseInfo) { //全部上传成功! } @Override public void onCancel() { //上传取消 } }) .build().upload(); |
断点上传
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
FileWrapper fileWrapper = new FileWrapper(); fileWrapper.setFile( new File( "/sdcard/Fund.apk" )); fileWrapper.setBlockSize( 100000 ); //上传100000字节数据,默认为0,上传至文件末尾 fileWrapper.setStartPos( 1000 ); //从1000字节开始上传 AsyncHttpRequest request = new AsyncHttpUtil.Builder() .addFileWrapper( "file" , fileWrapper) //自定义上传文件,支持断点续传,支持上传指定数据大小 .addFormData( "md5" , "aadfsdf" ) //添加form参数 .setCallable( new UploadRequestCallable() { @Override public void onFailed( int errorCode, String errorMsg) { //上传失败 } @Override public void onTransfering(String name, long totalLength, long transferedLength) { //上传进度 } @Override public void onTransferSuc(String name) { //文件name上传完成 } @Override public void onSuccess(String responseInfo) { //上传成功! } @Override public void onCancel() { //上传取消 } }) .build().upload(); |
中断请求
1
|
request.cancel(); |
打开/关闭日志输出
1
2
3
|
AsyncHttpLog.enableLog(); AsyncHttpLog.disableLog(); |
以上就是本文的全部内容,希望对大家的学习有所帮助。
南来地,北往的,上班的,下岗的,走过路过不要错过!
======================个性签名=====================
之前认为Apple 的iOS 设计的要比 Android 稳定,我错了吗?
下载的许多客户端程序/游戏程序,经常会Crash,是程序写的不好(内存泄漏?刚启动也会吗?)还是iOS本身的不稳定!!!
如果在Android手机中可以简单联接到ddms,就可以查看系统log,很容易看到程序为什么出错,在iPhone中如何得知呢?试试Organizer吧,分析一下Device logs,也许有用.