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() .url( "http://www.luoxudong.com/" ) .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() .url( "http://www.bchun.com/fund/service.do?func=getprovinces" ) .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() .url( "http://www.bchun.com/fund/service.do?func=getprovinces" ) .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() .url( "http://www.bchun.com/fund/service.do?func=getprovinces" ) .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() .url( "http://www.bchun.com/fund/service.do?func=getprovinces" ) .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() .url( "http://www.bchun.com/fund/service.do?func=getprovinces" ) .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() .url( "http://shouji.360tpcdn.com/151125/1259d7ddba8a048c2b9e778c9b5a9d04/com.bchun.fundqa_5.apk" ) .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() .url( "http://shouji.360tpcdn.com/151125/1259d7ddba8a048c2b9e778c9b5a9d04/com.bchun.fundqa_5.apk" ) .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() .url( "http://192.168.100.62:8080/myhost/fund/upload.do" ) .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() .url( "http://192.168.100.62:8080/myhost/fund/upload.do" ) .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(); |
以上就是本文的全部内容,希望对大家的学习有所帮助。