asyncHttp Android 网络请求框架

程序名称:asyncHttp

授权协议: Apache

操作系统: Android

开发语言: Java

asyncHttp 介绍

AsyncHttp

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

AsyncHttp 有哪些功能?

  • 基本网络请求

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

    • 单线程下载

    • 多线程下载

  • 自定义头部请求信息

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

  • 文件上传

使用方法

    compile 'com.ml.asynchttp:asynchttp-android:1.0.7'
        AsyncHttpUtils.init(new RequestInterceptorActionInterface() { @Override public <T> BaseHttpRequest<T> interceptorAction(BaseHttpRequest<T> baserequest) throws Exception { TelephonyManager tm = (TelephonyManager) BaseApplication.getInstance().getSystemService(Context.TELEPHONY_SERVICE); return baserequest;
            }
        }, new ResponseInterceptorActionInterface(){
        );
        LogUtils.setDebug(true);
  • 参数1自定义请求处理拦截器,需要实现 RequestInterceptorActionInterface 接口

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

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

普通网络请求

  ##### 常规写法 String url=Contents.baseURL+"user/"+ machineid +"/getDutyList.do"; Log.e("PaiBanActivity",url); AsyncHttpUtils.json(url, HttpMethod.Post, new HashMap<String, String>(), new JsonRequestLoadingCallback<PaiBanBean>(this) { @Override public void requestFail(Exception e, ResponseBody<String> request) {
                e.printStackTrace();
                showToast("网络出错,请重试");
            } @Override public void requsetFinish() {

            } @Override public void requsetStart() {

            } @Override public void requestSuccess(PaiBanBean paiBanBean) { Log.e("PaiBanActivity",paiBanBean.toString() ); int status = paiBanBean.getStatus(); if (status==1) {
                    setPaiBan(paiBanBean);
                }else {
                    showToast("获取数据失败,请重试");
                }
            }
        });


        ##### 个性写法

        ###### 步骤一:定义相关的接口 public interface PathBeanTest { @JSONPOST("http://{ip}.26.106.136:8080/rest/common/user/login.do") public CProxyRequester test(@PathParam("ip")String ip, @Param("username")String username, @Param("password")String passwork ); @GET("http://{ip}.26.106.136:8080/rest/common/allFactorys.do") public CProxyRequester getAll(@PathParam("ip")String ip);

        } *其中,方法注解包含有:JSONPOST POST GET DELETE PUT ....等 ,JSONPOST和POST无技术上差别,只是为了开发人员辨识清晰 *方法参数注解,包含两种,PathParam,Param ,PathParam表示匹配方法注解上的URL占位符,Param是请求的具体参数 ,注意:
         例如上面的  {ip}  方法中@PathParam("ip")String ip  名称要对应  否则,请求失败



    ###### 步骤二:通过代理实例化接口 PathBeanTest t= ProxyCreater.creator(PathBeanTest.class);

    ###### 步骤三:设置结果处理线程级别
        t.getAll("120").ResultMonitor(MIO.MainThread).Observation(new StringRequestResultCallBack<FactoryTestBean>() { @Override public void requestFail(Exception e, ResponseBody<String> request) {

                } @Override public void requestSuccess(FactoryTestBean factoryTestBean) { Log.e("tag",factoryTestBean.getMsg()+" "+factoryTestBean.getData().getList().size());
                } @Override public void requsetFinish() {

                } @Override public void requsetStart() {

                }
            });


        ######MIO.MainThread表示主线程,MIO.IOThread 表示IO线程

文件的下载

写法一: String url="http://scimg.jb51.net/allimg/160815/103-160Q509544OC.jpg"; //必须设置存储路径 String filepath="C:\\Users\\admin\\Pictures\\Camera Roll\\img"+i+".jpg"; FileRequest resReques=new FileRequest(url);

        resReques.setFilepath(filepath);

        resReques.addHead(new Header("user-agent", "AsyHttp/1.0 ml"));

        resReques.setRequestMethod(HttpMethod.Get); TaskHandler taskhandler= AsyncHttp.instance().download(resReques, new FileTest()); //可以调用 taskhandler.stop()方法取消任务 //FileTest 是 继承了 DownProgrossCallback<ResponseBody<T>>的 回掉接口,实现进度的监控,和结果的返回 }


写法二: AsyncHttpUtils.download("http://pic1.sc.chinaz.com/files/pic/pic9/201611/apic24088.jpg", "/sdcard/test/", "file.jpg", new DownProgrossCallback<ResponseBody<File>>() { @Override public void download_current(long current, long total) { Log.e("tag", "current=" + current + " total=" + total); int pr = (int) (current * 100.0 / total);
                        xiazai_pr.setProgress(pr);
                    } @Override public void start() { Toast.makeText(getApplication(), "开始下载", Toast.LENGTH_SHORT).show();
                    } @Override public void finish() { Toast.makeText(getApplication(), "完成", Toast.LENGTH_SHORT).show();
                    } @Override public void success(ResponseBody<File> result) { Toast.makeText(getApplication(), "成功下载" + result.getResult().getPath(), Toast.LENGTH_SHORT).show();

                    } @Override public void fail(Exception e, ResponseBody<File> request) {
                        e.printStackTrace(); Toast.makeText(getApplication(), e.getMessage(), Toast.LENGTH_SHORT).show();

                    }
                });

写法三: public interface DownloadTest { @DOWNLOAD("http://pic6.nipic.com/20100426/1687102_082357914928_2.jpg") public CProxyRequester<File> down(@Param String path);
            } DownloadTest downloadTest=ProxyCreater.creator(DownloadTest.class);
            downloadTest.down("/sdcard/test/file2.jpg").ResultMonitor(MIO.MainThread).Observation(new DownProgrossCallback<ResponseBody<File>>() { @Override public void download_current(long current, long total) {

                        } @Override public void start() {

                        } @Override public void finish() {

                        } @Override public void success(ResponseBody<File> result) {

                        } @Override public void fail(Exception e, ResponseBody request) {

                        }
                    });

多线程下载文件

String urls="http://img.taopic.com/uploads/allimg/130711/318756-130G1222R317.jpg"; String name=urls.substring(urls.lastIndexOf("/")+1,urls.length()); String filepath="C:\\Users\\admin\\Pictures\\Camera Roll\\"+name;

        download s= new download(new RecordEntity(urls,filepath));

        s.setTaskPriority(TaskPriority.LOWEST.getValue());//设置优先级 TaskHandler t= AsyncHttp.instance().download(s, new DownProgrossCallback<ResponseBody<RandomAccessFile>>() { @Override public void download_current(long current, long total) { // TODO Auto-generated method stub // System.out.println("当前 "+e+"  current=="+current+"    total="+total); } @Override public void fail(Exception e1,ResponseBody<RandomAccessFile> response) { // TODO Auto-generated method stub super.fail(e1,response); System.out.println("任务 "+ e+" ="+ Utils.getNowTime()+" e1="+e1.getMessage());

            } @Override public void start() { // TODO Auto-generated method stub super.start(); System.out.println("任务 "+ e+" startTime="+ Utils.getNowTime());
            } @Override public void finish() { // TODO Auto-generated method stub super.finish(); System.out.println("任务 "+ e+" endTime="+ Utils.getNowTime());

            }


       });

上传文件 (单线程)

   #####一般写法1 String url="http://192.168.1.33:8080/StrutsDemo2/upload.action"; UploadRequest resReques=new UploadRequest(url);
   resReques.addParam(new FileParamPart("upload", new File("C:\\Users\\admin\\Pictures\\Camera Roll\\img10.jpg"),Constents.TYPE_IMAGE));

   resReques.setRequestMethod(HttpMethod.Post); AsyncHttp.instance().newRequest2(resReques, new uploadTest()); //uploadTest是 继承了   UploadProgrossCallback<ResponseBody<T>>的 回掉接口,实现进度的监控,和结果的返回 #####一般写法2 AsyncHttpUtils.upload("http://120.26.106.136:8080/rest/common/user/uploadAvatar.do", "/sdcard/test/test.jpg", "file", new UploadProgrossCallback<ResponseBody<String>>() { @Override public void upload_current(long current, long currentFileTotal, long total) { int pr = (int) (current * 100.0 / total); Log.e("tag", "current=" + current + " currentFileTotal= " + currentFileTotal + " total=" + total);
                         progressBar_shangchuan.setProgress(pr);
                     } @Override public void start() { Toast.makeText(getApplication(), "开始上传", Toast.LENGTH_SHORT).show();
                     } @Override public void finish() { Toast.makeText(getApplication(), "完成", Toast.LENGTH_SHORT).show();
                     } @Override public void success(ResponseBody<String> result) { Log.e("tag", result.getResult());

                     } @Override public void fail(Exception e, ResponseBody<String> request) { Toast.makeText(getApplication(), e.getMessage(), Toast.LENGTH_SHORT).show();
                         e.printStackTrace(); Log.e("tag", request.getResult());

                     }
                 });

   #####个性写法 public interface UploadTest { @UPLOAD("http://120.26.106.136:8080/rest/common/user/uploadFile.do") public CProxyRequester<UploadResultBean> upload(@Param("file") String filepath);
    } UploadTest uploadTest= ProxyCreater.creator(UploadTest.class);
                uploadTest.upload("/sdcard/test/file.jpg").ResultMonitor(MIO.MainThread).Observation(new UploadRequestResultCallBack<UploadResultBean>(){ @Override public void upload_current(long current, long currentFileTotal, long total) { int pr = (int) (current * 100.0 / total); Log.e("tag", "current=" + current + " currentFileTotal= " + currentFileTotal + " total=" + total);
                        progressBar_shangchuan.setProgress(pr);
                    } @Override public void requestFail(Exception e, ResponseBody<String> request) {
                            e.printStackTrace();
                    } @Override public void requestSuccess(UploadResultBean uploadResultBean) { Log.e("tag",uploadResultBean.getMsg()); Toast.makeText(getApplicationContext(),uploadResultBean.getData().getName(),Toast.LENGTH_LONG).show();
                    } @Override public void requsetFinish() {

                    } @Override public void requsetStart() {

                    }
                });

有问题反馈

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

作者其他开源

asyncHttp 官网

https://github.com/MengLeiGitHub/AsyncHttp

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


BlazeDS 是一个基于服务器的Java 远程控制(remoting)和Web消息传递(messaging)技术, 它能够使得后端的Java应用程序和运行在浏览器上的Adobe
OVal 是一个可扩展的Java对象数据验证框架,验证的规则可以通过配置文件、Annotation、POJOs 进行设定。可以使用纯 Java
Volta 是一套开发工具,专为开发分布式、实时系统应用。它包括级联,控制流分析工具,
OpenDDS 是一个开源的 C++ 实现的 对象管理组织 OMG 的 数据分布式服务 (DDS) 。OpenDDS利用自适应通信环境(ACE)提供一个跨平台的环境。
JADE (Java Agent DEvelopment Framework) 是一个完全用Java语言实现的软件框架。它通过一个兼容 FIPA
FastMM ,在D2006和2007中已代替了原来的内存管理器。
WebRTC 是一项在浏览器内部进行实时视频和音频通信的技术,是谷歌于2010年以6820万美元收购VoIP软件开发商 Global IT
gwtwiki - The Java Wikipedia API (Bliki engine),是一个 Wikipedia/Mediawiki 语法解析器,可以把 wiki 的文本转换成 HTML。它支持 wiki 标签,例如 bold, italic, headers, nowiki,
Esper 是一个复杂事件处理组件(CEP - Complex Event Processing),它有 Java 版本和 .NET 版本(NEsper)。
LuaTinker 的作者是Kwon-il Lee韩国人写的,最新的版本是0.2.C,这个C++ wrapper For Lua能够方便和
各种语言环境下gitignore文件的一个集合。
简介 ContentExtractor 是一个开源的网页正文抽取工具,用JAVA实现,具有非常高的抽取精度。
SwiftRandom 是一组函数集合,可以从不同的分布生成伪随机变量。 使用示例: //Single pseudorandom normal variable
java-linq-examples 是 101 个 LINQ 示例的 Java 移植版本。Android 兼容 Java 1.7. 此外还有以下语言移植版本:
mal,Make a Lisp,顾名思义,用图灵完备的编程语言写 Lisp 交互器,目前已经有35种不同语言的实现:
一个 Go 语言实现的中国行政区划查询工具。 介绍 最新中国行政区划,数据来源:http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201608/t20160809_1386477.html
Teaf 简介 Tencent Easy ACE Framework,基于 ACE 的高性能轻量级服务框架,单进程多线程模型,支持 select/epoll 等多种网络
介绍 让 Guzzle 支持 Swoole 协程,这个项目目的就是这么简单明了! Guzzle-Swoole 是 Guzzle 的处理器(Handler),并没有对 Guzzle 本身代码进行修改,理论上可以兼容后续版本。
goproxy-shell goproxy服务端部署脚本 使用方法 wget --no-check-certificate https://github.com/sjz123321/goproxy-
1. pyMd2Doc介紹(pip版本) 利用python将markdown转换成带可收缩、可跳转到文本内容的目录文档。