欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-02-16 23:31:52
asynchttphelp是一个android平台下基于httpclient开发的http网络请求工具。 优点 功能齐全,提供常用的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请求

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对象)
 

  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请求   

 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表单)

  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请求(内容为二进制数据)

  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字符串自动转换对象)

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

普通下载

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

断点下载  

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

普通上传
   

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

断点上传
  

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

中断请求

 request.cancel();

打开/关闭日志输出

 asynchttplog.enablelog();

asynchttplog.disablelog();

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