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










评论