服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android平台下轻量级http网络传输库

Android平台下轻量级http网络传输库

2021-05-11 17:07rohsuton Android

这篇文章主要介绍了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线程执行
测试示例

Android平台下轻量级http网络传输库

用法示例

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();

以上就是本文的全部内容,希望对大家的学习有所帮助。

延伸 · 阅读

精彩推荐