asyncHttp Android 网络请求框架开源项目

我要开发同款
匿名用户2016年12月04日
75阅读

技术信息

开源地址
https://github.com/MengLeiGitHub/AsyncHttp
授权协议
Apache

作品详情

AsycHttp

一款为adroid网络请求的框架,采用最少的线程,基于AsycPool线程池实现的http请求,支持post和get、delete等多种请求,实现请求任务和结果异步获取,支持初中高级开发人员各阶段的代码习惯。底层采用的是主线程管理工作线程的模式,并且维护了自己的请求队列,并且采取了任务的执行和结果的返回采取了不同的线程执行,所以更适用于批量网络请求

AsycHttp有哪些功能?

基本网络请求

文件下载(支持断点下载)

单线程下载

多线程下载

自定义头部请求信息

含有优先级,防止请求无反应

文件上传

使用方法

如何接入?    compile 'com.ml.asychttp:asychttp-adroid:1.0.7'初始化        AsycHttpUtils.iit(ew RequestIterceptorActioIterface() { @Override public <T> BaseHttpRequest<T> iterceptorActio(BaseHttpRequest<T> baserequest) throws Exceptio { TelephoyMaager tm = (TelephoyMaager) BaseApplicatio.getIstace().getSystemService(Cotext.TELEPHONY_SERVICE); retur baserequest;            }        }, ew ResposeIterceptorActioIterface(){        );        LogUtils.setDebug(true);

参数1自定义请求处理拦截器,需要实现RequestIterceptorActioIterface接口

参数2是结果过滤器,可以自定义,只需要实现ResposeIterceptorActioIterface接口

提示:请求拦截器和过滤器可以在框架初始化添加,也可以在创建请求的时候,添加到请求中

普通网络请求

  ##### 常规写法 Strig url=Cotets.baseURL+"user/"+ machieid +"/getDutyList.do"; Log.e("PaiBaActivity",url); AsycHttpUtils.jso(url, HttpMethod.Post, ew HashMap<Strig, Strig>(), ew JsoRequestLoadigCallback<PaiBaBea>(this) { @Override public void requestFail(Exceptio e, ResposeBody<Strig> request) {                e.pritStackTrace();                showToast("网络出错,请重试");            } @Override public void requsetFiish() {            } @Override public void requsetStart() {            } @Override public void requestSuccess(PaiBaBea paiBaBea) { Log.e("PaiBaActivity",paiBaBea.toStrig() ); it status = paiBaBea.getStatus(); if (status==1) {                    setPaiBa(paiBaBea);                }else {                    showToast("获取数据失败,请重试");                }            }        });        ##### 个性写法        ###### 步骤一:定义相关的接口 public iterface PathBeaTest { @JSONPOST("https://{ip}.26.106.136:8080/rest/commo/user/logi.do") public CProxyRequester test(@PathParam("ip")Strig ip, @Param("userame")Strig userame, @Param("password")Strig passwork ); @GET("https://{ip}.26.106.136:8080/rest/commo/allFactorys.do") public CProxyRequester getAll(@PathParam("ip")Strig ip);        } *其中,方法注解包含有:JSONPOST POST GET DELETE PUT ....等 ,JSONPOST和POST无技术上差别,只是为了开发人员辨识清晰 *方法参数注解,包含两种,PathParam,Param ,PathParam表示匹配方法注解上的URL占位符,Param是请求的具体参数 ,注意:         例如上面的  {ip}  方法中@PathParam("ip")Strig ip  名称要对应  否则,请求失败    ###### 步骤二:通过代理实例化接口 PathBeaTest t= ProxyCreater.creator(PathBeaTest.class);    ###### 步骤三:设置结果处理线程级别        t.getAll("120").ResultMoitor(MIO.MaiThread).Observatio(ew StrigRequestResultCallBack<FactoryTestBea>() { @Override public void requestFail(Exceptio e, ResposeBody<Strig> request) {                } @Override public void requestSuccess(FactoryTestBea factoryTestBea) { Log.e("tag",factoryTestBea.getMsg()+" "+factoryTestBea.getData().getList().size());                } @Override public void requsetFiish() {                } @Override public void requsetStart() {                }            });        ######MIO.MaiThread表示主线程,MIO.IOThread 表示IO线程

文件的下载

写法一: Strig url="https://scimg.jb51.et/allimg/160815/103-160Q509544OC.jpg"; //必须设置存储路径 Strig filepath="C:\\Users\\admi\\Pictures\\Camera Roll\\img"+i+".jpg"; FileRequest resReques=ew FileRequest(url);        resReques.setFilepath(filepath);        resReques.addHead(ew Header("user-aget", "AsyHttp/1.0 ml"));        resReques.setRequestMethod(HttpMethod.Get); TaskHadler taskhadler= AsycHttp.istace().dowload(resReques, ew FileTest()); //可以调用 taskhadler.stop()方法取消任务 //FileTest 是 继承了 DowProgrossCallback<ResposeBody<T>>的 回掉接口,实现进度的监控,和结果的返回 }写法二: AsycHttpUtils.dowload("https://pic1.sc.chiaz.com/files/pic/pic9/201611/apic24088.jpg", "/sdcard/test/", "file.jpg", ew DowProgrossCallback<ResposeBody<File>>() { @Override public void dowload_curret(log curret, log total) { Log.e("tag", "curret=" + curret + " total=" + total); it pr = (it) (curret * 100.0 / total);                        xiazai_pr.setProgress(pr);                    } @Override public void start() { Toast.makeText(getApplicatio(), "开始下载", Toast.LENGTH_SHORT).show();                    } @Override public void fiish() { Toast.makeText(getApplicatio(), "完成", Toast.LENGTH_SHORT).show();                    } @Override public void success(ResposeBody<File> result) { Toast.makeText(getApplicatio(), "成功下载" + result.getResult().getPath(), Toast.LENGTH_SHORT).show();                    } @Override public void fail(Exceptio e, ResposeBody<File> request) {                        e.pritStackTrace(); Toast.makeText(getApplicatio(), e.getMessage(), Toast.LENGTH_SHORT).show();                    }                });写法三: public iterface DowloadTest { @DOWNLOAD("https://pic6.ipic.com/20100426/1687102_082357914928_2.jpg") public CProxyRequester<File> dow(@Param Strig path);            } DowloadTest dowloadTest=ProxyCreater.creator(DowloadTest.class);            dowloadTest.dow("/sdcard/test/file2.jpg").ResultMoitor(MIO.MaiThread).Observatio(ew DowProgrossCallback<ResposeBody<File>>() { @Override public void dowload_curret(log curret, log total) {                        } @Override public void start() {                        } @Override public void fiish() {                        } @Override public void success(ResposeBody<File> result) {                        } @Override public void fail(Exceptio e, ResposeBody request) {                        }                    });

多线程下载文件

Strig urls="https://img.taopic.com/uploads/allimg/130711/318756-130G1222R317.jpg"; Strig ame=urls.substrig(urls.lastIdexOf("/")+1,urls.legth()); Strig filepath="C:\\Users\\admi\\Pictures\\Camera Roll\\"+ame;        dowload s= ew dowload(ew RecordEtity(urls,filepath));        s.setTaskPriority(TaskPriority.LOWEST.getValue());//设置优先级 TaskHadler t= AsycHttp.istace().dowload(s, ew DowProgrossCallback<ResposeBody<RadomAccessFile>>() { @Override public void dowload_curret(log curret, log total) { // TODO Auto-geerated method stub // System.out.pritl("当前 "+e+"  curret=="+curret+"    total="+total); } @Override public void fail(Exceptio e1,ResposeBody<RadomAccessFile> respose) { // TODO Auto-geerated method stub super.fail(e1,respose); System.out.pritl("任务 "+ e+" ="+ Utils.getNowTime()+" e1="+e1.getMessage());            } @Override public void start() { // TODO Auto-geerated method stub super.start(); System.out.pritl("任务 "+ e+" startTime="+ Utils.getNowTime());            } @Override public void fiish() { // TODO Auto-geerated method stub super.fiish(); System.out.pritl("任务 "+ e+" edTime="+ Utils.getNowTime());            }       });

上传文件(单线程)

   #####一般写法1 Strig url="https://192.168.1.33:8080/StrutsDemo2/upload.actio"; UploadRequest resReques=ew UploadRequest(url);   resReques.addParam(ew FileParamPart("upload", ew File("C:\\Users\\admi\\Pictures\\Camera Roll\\img10.jpg"),Costets.TYPE_IMAGE));   resReques.setRequestMethod(HttpMethod.Post); AsycHttp.istace().ewRequest2(resReques, ew uploadTest()); //uploadTest是 继承了   UploadProgrossCallback<ResposeBody<T>>的 回掉接口,实现进度的监控,和结果的返回 #####一般写法2 AsycHttpUtils.upload("https://120.26.106.136:8080/rest/commo/user/uploadAvatar.do", "/sdcard/test/test.jpg", "file", ew UploadProgrossCallback<ResposeBody<Strig>>() { @Override public void upload_curret(log curret, log curretFileTotal, log total) { it pr = (it) (curret * 100.0 / total); Log.e("tag", "curret=" + curret + " curretFileTotal= " + curretFileTotal + " total=" + total);                         progressBar_shagchua.setProgress(pr);                     } @Override public void start() { Toast.makeText(getApplicatio(), "开始上传", Toast.LENGTH_SHORT).show();                     } @Override public void fiish() { Toast.makeText(getApplicatio(), "完成", Toast.LENGTH_SHORT).show();                     } @Override public void success(ResposeBody<Strig> result) { Log.e("tag", result.getResult());                     } @Override public void fail(Exceptio e, ResposeBody<Strig> request) { Toast.makeText(getApplicatio(), e.getMessage(), Toast.LENGTH_SHORT).show();                         e.pritStackTrace(); Log.e("tag", request.getResult());                     }                 });   #####个性写法 public iterface UploadTest { @UPLOAD("https://120.26.106.136:8080/rest/commo/user/uploadFile.do") public CProxyRequester<UploadResultBea> upload(@Param("file") Strig filepath);    } UploadTest uploadTest= ProxyCreater.creator(UploadTest.class);                uploadTest.upload("/sdcard/test/file.jpg").ResultMoitor(MIO.MaiThread).Observatio(ew UploadRequestResultCallBack<UploadResultBea>(){ @Override public void upload_curret(log curret, log curretFileTotal, log total) { it pr = (it) (curret * 100.0 / total); Log.e("tag", "curret=" + curret + " curretFileTotal= " + curretFileTotal + " total=" + total);                        progressBar_shagchua.setProgress(pr);                    } @Override public void requestFail(Exceptio e, ResposeBody<Strig> request) {                            e.pritStackTrace();                    } @Override public void requestSuccess(UploadResultBea uploadResultBea) { Log.e("tag",uploadResultBea.getMsg()); Toast.makeText(getApplicatioCotext(),uploadResultBea.getData().getName(),Toast.LENGTH_LONG).show();                    } @Override public void requsetFiish() {                    } @Override public void requsetStart() {                    }                });

有问题反馈

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

邮件:meglei0207@sia.c

github:https://github.com/MegLeiGitHub/

作者其他开源

miiorm-for-adroid

AsycPool

功能介绍

AsyncHttp 一款为android 网络请求的框架,采用最少的线程,基于AsyncPool 线程池实现的 http请求,支持 post和 get、delete等多种请求,实现请求任务和结果...

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论