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线程执行
测试示例

用法示例

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

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

(0)

相关推荐

  • AndroidHttpClient使用Cookie应用分析

    今天想把一个用使用了HttpClient的自动签到小程序移植到Android上,还好Android的SDK自带了HttpClient的包.翻Android的文档时发现官方还提供了一个实现了HttpClient接口的AndroidHttpClient,上网搜了下没发现关于AndroidHttpClient的文章.当然也可以继续使用DefaultHttpClient,但用为Android定制的AndroidHttpClient自然更好. 下面是2个测试用的HttpServlet: 复制代码 代码如下

  • Android开发之HTTP访问网络

    本文实例为大家详细介绍了Android开发之HTTP访问网络的相关代码,供大家参考,具体内容如下 代码1: package com.ywhttpurlconnection; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class Ywhttpur

  • android之HttpPost&HttpGet使用方法介绍

    直接讲用法,先知道怎么用,再知道怎么回事 1.HttpPost 复制代码 代码如下: try{ //创建连接 HttpClient httpClient = new DefaultHttpClient(); HttpPost post = new HttpPost(url); //设置参数,仿html表单提交 List<NameValuePair> paramList = new ArrayList<NameValuePair>(); BasicNameValuePair para

  • Android使用http请求手机号码归属地查询代码分享

    归属地数据源 http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx webxml网站还支持其他请求方式 如SOAP等等 界面比较简单 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" an

  • Android使用OKHttp包处理HTTP相关操作的基本用法讲解

    OKHttp是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket,通过连接池来减小响应延迟,还有透明的GZIP压缩,请求缓存等优势.(GitHub页:https://github.com/square/okhttp) Android为我们提供了两种HTTP交互的方式:HttpURLConnection 和 Apache HTTP Client,虽然两者都支持HTTPS,流的上传和下载,配置超时,IPv6和连接池,已足够满足我们各种HTTP请求的需求.但更高效的使用HTTP 可

  • Android HttpClient GET或者POST请求基本使用方法

    在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务.你可以把HttpClient想象成一个浏览器,通过它的API我们可以很方便的发出GET,POST请求(当然它的功能远不止这些) 这里只介绍如何使用HttpClient发起GET或者POST请求 GET 方式 复制代码 代码如下: //先将参数放入List,再对参数进行URL编码 List<BasicNameValuePair>

  • Android中发送Http请求(包括文件上传、servlet接收)的实例代码

    复制代码 代码如下: /*** 通过http协议提交数据到服务端,实现表单提交功能,包括上传文件* @param actionUrl 上传路径 * @param params 请求参数 key为参数名,value为参数值 * @param file 上传文件 */public static void postMultiParams(String actionUrl, Map<String, String> params, FormBean[] files) {try {PostMethod p

  • Android基于Http协议实现文件上传功能的方法

    本文实例讲述了Android基于Http协议实现文件上传功能的方法.分享给大家供大家参考,具体如下: 注意一般使用Http协议上传的文件都比较小,一般是小于2M 这里示例是上传一个小的MP3文件 1.主Activity:MainActivity.java public class MainActivity extends Activity { private static final String TAG = "MainActivity"; private EditText timel

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

    AsyncHttpHelp是一个android平台下基于httpclient开发的HTTP网络请求工具. 优点 功能齐全,提供常用的http网络访问接口. 轻量级,无任何第三方库依赖,库大小为90K左右. 定制化,自定义json解析库,支持请求参数,返回内容预处理. 易用性,简单易用,只需几行代码即可完成请求,可随意设置cookie.http头部等信息. 功能 1.普通get请求 2.普通post请求 3.Form表单提交数据 4.二进制数据传输 5.json格式内容传输(json字符串自动转j

  • C/C++在Java、Android和Objective-C三大平台下实现混合编程

    Android和iOS开发都支持C++开发,可以一套代码多平台使用.同时C++难以反编译的特性也可以为Android开发带来代码的保密,另一native特性也可以提高代码的运行效率. 一.为什么使用C/C++ 便于移植,用C/C++写得库可以方便在其他的平台上再次使用. 代码的保护,由于java层代码很容易被反编译,而C/C++库反汇难度较大. 提高程序的执行效率,将要求高性能的应用逻辑使用C/C++开发,从而提高应用程序的执行效率. 访问现有开源库,需要访问底层的API或引用一些只有C/C++

  • Android studio 下JNI编程实例并生成so库的实现代码

    最近需要使用JNI编程,学了下JNI,并且在Android Studio下实现了一个小demo.这期间有一些坑,还好都解决了,想分享出来,希望大家少走弯路.本文中采用的平台是Windows,NDK环境已经搭建好,这方面资料很多,大家可以自行百度. 本文分为两个部分: 1.如何通过编写Jni实现native方法的调用. 2.怎样生成.so动态库提供给第三方使用. 以下是正文: 一,编写jni文件,实现本地方法 1,建立一个新工程,只有一个MainActivity,里面加载库文件并且调用若干本地方法

  • android 网络请求库volley方法详解

    使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包 volley网络请求步骤: 1. 创建请求队列       RequestQueue queue = Volley.newRequestQueue(this); 2.创建请求对象(3种) StringRequest request = new StringRequest("请求方法","请求的网络地址","成功的网

  • Android 实现无网络传输文件的示例代码

    最近的项目需要实现一个 Android 手机之间无网络传输文件的功能,就发现了 Wifi P2P(Wifi点对点)这么一个功能,最后也实现了通过 Wifi 隔空传输文件 的功能,这里我也来整理下代码,分享给大家. Wifi P2P 是在 Android 4.0 以及更高版本系统中加入的功能,通过 Wifi P2P 可以在不连接网络的情况下,直接与配对的设备进行数据交换.相对于蓝牙,Wifi P2P 的搜索速度和传输速度更快,传输距离更远 实现的效果如下所示: 客户端.png 服务器端.png 一

  • Android网络请求库android-async-http介绍

    Android网络请求库:android-async-http开源框架 之前有一篇描述了客户端请求服务器端的方式-Post的请求方式.今天介绍一个请求服务器的一个开源库-android-async-http库. 1. 概念: 这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法(匿名内部类)处理请求结果. 2. 特征: (1).处理异步Http请求,并通过匿名内部类处理回调结果 **(2).**Http异步请

  • Android平台中实现数据存储的5种方式

    本文介绍Android中的5种数据存储方式,具体内容如下 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面将为大家一一详细介绍.  第一种:使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一

  • 如何在Android Studio下进行NDK开发

    在AS中进行NDK开发之前,我们先来简单的介绍几个大家都容易搞懵的概念: 1. 到底什么是JNI,什么是NDK? 2. 何为"交叉编译"? 先看什么是JNI?JNI的全称就是Java Native Interface,即java本地开发接口.可能大家和我一样,一听到接口什么的就犯懵:"我也知道这是java本地开发接口的意思,但它具体是个什么意思我还是搞不明白."其实JNI它就是一种协议,一说协议,那它就是对某种东西的一个规范和约束,说的好听一点就是标准化.如果你想用

  • 解决Android平台中应用程序OOM异常的方法

    在Android平台上面,应用程序OOM异常永远都是值得关注的问题.通常这一块也是程序这中的重点之一.这下我就如何解决OOM作一点简单的介绍. 首先,OOM就是内存溢出,即Out Of Memory.也就是说内存占有量超过了VM所分配的最大. 怎么解决OOM,通常OOM都发生在需要用到大量内存的情况下(创建或解析Bitmap,分配特大的数组等),在这样的一种情况下,就可能出现OOM,据我现在了解到,多数OOM都是因为Bitmap太大.所以,这里我就专门针对如何解决Bitmap的OOM.其实最核发

  • 详解android环境下的即时通讯

    首先了解一下即时通信的概念.通过消息通道 传输消息对象,一个账号发往另外一账号,只要账号在线,可以即时获取到消息,这就是最简单的即使通讯.消息通道可由TCP/IP UDP实现.通俗讲就是把一个人要发送给另外一个人的消息对象(文字,音视频,文件)通过消息通道(C/S实时通信)进行传输的服务.即时通讯应该包括四种形式,在线直传.在线代理.离线代理.离线扩展.在线直传指不经过服务器,直接实现点对点传输.在线代理指消息经过服务器,在服务器实现中转,最后到达目标账号.离线代理指消息经过服务器中转到达目标账

随机推荐