Android  android-async-http二次封装和调用

在开发过程中,网络请求这块的使我们常常遇到的一个问题,今天去github 站点上面学习android-async-http,认为还是不错的  使用起来也比較简便   网络请求框架是一个不错的选择   方便大家一起共同讨论   QQ群:160373684
/**
 * 

 * @类描写叙述:android-async-http 进行封装的类

 * @项目名称:

 * @包名:

 * @类名称:AndroidAsyncHttpHelper

 * @创建人:John

 * @创建时间:2015年8月14日上午10:51:03

 * @改动人:John

 * @改动时间:2015年8月14日上午10:51:03

 * @改动备注:

 * @version v1.0

 * @see [nothing]

 * @bug [nothing]

 * 

 */

public class AndroidAsyncHttpHelper {

private static AndroidAsyncHttpHelper instance;

/**

* 定义一个异步网络client 默认超时未10秒 当超过,默认重连次数为5次 默认最大连接数为10个   

*/

private static AsyncHttpClient client = new AsyncHttpClient();

static {

client.setTimeout(10000);//设置超时的时间

}

    private AndroidAsyncHttpHelper() {

}

    /**

* HTTP GET METHODs -- 存在异常或者请求超时情况下。回调返回值将是空字符串



* @param uri

*            请求的url

* @param callback

*            请求完毕后回调的方法

*/

public void get(Context context, String url,

final AsyncHttpResponseHandler callback) {

httpRequest(context, url, null, callback, EHttpMethod.GET);

}





public void get(Context context, String url, Map<String, Object> params,

final AsyncHttpResponseHandler callback) {

httpRequest(context, url, params, callback, EHttpMethod.GET);

}





/**

* HTTP POST METHODs -- 存在异常或者请求超时情况下,回调返回值将是空字符串



* @param uri

*            请求的url

* @param callback

*            请求完毕后回调的方法

*/

public void post(Context context, String url,

final AsyncHttpResponseHandler callback) {

httpRequest(context, url, null, callback, EHttpMethod.POST);

}





public void post(Context context, String url, Map<String, Object> params,

final AsyncHttpResponseHandler callback) {

httpRequest(context, url, params, callback, EHttpMethod.POST);

}

    /**

     * 

     * @描写叙述:构建一个单例类

     * @方法名: getInstance

     * @return

     * @返回类型 AndroidAsyncHttpHelper

     * @创建人 John

     * @创建时间 2015年8月14日上午10:52:21

     * @改动人 John

     * @改动时间 2015年8月14日上午10:52:21

     * @改动备注 

     * @since

     * @throws

     */

public static AndroidAsyncHttpHelper getInstance() {

if (null == instance) {

synchronized (AndroidAsyncHttpHelper.class) {

if (null == instance) {

instance = new AndroidAsyncHttpHelper();

}

}

}

return instance;

}

private void httpRequest(Context context, String url,

Map<String, Object> params,

final AsyncHttpResponseHandler callback, EHttpMethod method) {

/* 推断网络状态 */

if (!InternetUtil.isNetWorking(context)) {

String str = "暂无网络";

callback.sendFailureMessage(40, null, str.getBytes(), null);

return;

}

/* 得到请求參数 */

RequestParams requestParams = new RequestParams();

if (null != params && params.size() > 0) {

for (String key : params.keySet()) {

requestParams.put(key, params.get(key));

}

}





switch (method) {

case GET:

client.get(context, url, requestParams, callback);

break;





case POST:

client.post(context, url, requestParams, callback);

break;





default:

break;

}

}

/**



* @类描写叙述:请求的类型

* @项目名称:

* @包名:

* @类名称:EHttpMethod

* @创建人:John

* @创建时间:2015年8月14日上午10:55:44

* @改动人:John

* @改动时间:2015年8月14日上午10:55:44

* @改动备注:

* @version v1.0

* @see [nothing]

* @bug [nothing]



*/

public enum EHttpMethod {

GET, POST

}

    /**

     * 

     * @类描写叙述:请求处理的类型

     * @项目名称

     * @包名:

     * @类名称:EResponseHandlerType

     * @创建人:John

     * @创建时间:2015年8月14日上午10:56:09

     * @改动人:John

     * @改动时间:2015年8月14日上午10:56:09

     * @改动备注:

     * @version v1.0

     * @see [nothing]

     * @bug [nothing]

     * 

     */

public enum EResponseHandlerType {

Text, Json

}



    public class InternetUtil {

public static boolean isNetWorking(final Context context)

{

boolean flag = checkNet(context);

if (!flag) 

{

Toast.makeText(context, "应用当前处于离线操作状态", Toast.LENGTH_SHORT).show();

}

return flag;

}

/**



* @描写叙述:推断是否有网络连接

* @方法名: checkNet

* @param context

* @return

* @返回类型 boolean

* @创建人 John

* @创建时间 2015年8月14日上午10:59:54

* @改动人 John

* @改动时间 2015年8月14日上午10:59:54

* @改动备注 

* @since

* @throws

*/

private static boolean checkNet(Context context) {





if (context != null) {

ConnectivityManager mConnectivityManager = (ConnectivityManager) context

.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo mNetworkInfo = mConnectivityManager

.getActiveNetworkInfo();

if (mNetworkInfo != null) {

return mNetworkInfo.isAvailable();

}

}

return false;

}

/**



* @param context

* @return 推断WIFI网络是否可用

*/

public boolean isWifiConnected(Context context) {

if (context != null) {

ConnectivityManager mConnectivityManager = (ConnectivityManager) context

.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo mWiFiNetworkInfo = mConnectivityManager

.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if (mWiFiNetworkInfo != null) {

return mWiFiNetworkInfo.isAvailable();

}

}

return false;

}





/**



* @param context

* @return 推断MOBILE网络是否可用

*/

public boolean isMobileConnected(Context context) {

if (context != null) {

ConnectivityManager mConnectivityManager = (ConnectivityManager) context

.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo mMobileNetworkInfo = mConnectivityManager

.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

if (mMobileNetworkInfo != null) {

return mMobileNetworkInfo.isAvailable();

}

}

return false;

}





/**



* @param context

* @return 获取当前网络连接的类型信息

*/

public static int getConnectedType(Context context) {

if (context != null) {

ConnectivityManager mConnectivityManager = (ConnectivityManager) context

.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo mNetworkInfo = mConnectivityManager

.getActiveNetworkInfo();

if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {

return mNetworkInfo.getType();

}

}

return -1;

}


在activity中直接调用   代码例如以下:

mAsyncHttpHelper=AndroidAsyncHttpHelper.getInstance();

Map<String,Object>  params=new HashMap<String,Object>();

params.put("username","wangliang");

params.put("password","123456");

params.put("registId","123456");

mAsyncHttpHelper.post(this,HttpURL.LOGOIN, params, new AsyncHttpResponseHandler() 

{





@Override

public void onFailure(int arg0, Header[] arg1, byte[] arg2,

Throwable arg3) {

System.out.println("失败:"+arg0);



}





@Override

public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {

System.out.println("成功:"+arg0);

System.out.println(new String(arg2));



}

    


android-async-http二次封装和调用的更多相关文章

  1. 社会化登录分享-Android SDK的二次封装和使用

    本系列文章将第三方的登录分享功能进行二次封装,统一接口调用,简化了接不同平台登录分享的步骤. 0 系列文章 系列一 Android SDK的二次封装和使用 系列二 源码解析 系列三 微信SDK接入 系 ...

  2. 代码二次封装-xUtils(android)

    通常我们会引用很多lib 而且会出现lib 与我们的功能仅仅差一点点 这种情况我们最好不要去改动源代码 而是进行二次封装 举例我使用 xUtils的二次封装 此处说明我是搞ios的 这个是androi ...

  3. Android 应用程序集成Google 登录及二次封装

    谷歌登录API:  https://developers.google.com/identity/sign-in/android/ 1.注册并且登录google网站 https://accounts. ...

  4. Android 应用程序集成FaceBook 登录及二次封装

    1.首先在Facebook 开发者平台注册一个账号 https://developers.facebook.com/ 开发者后台  https://developers.facebook.com/ap ...

  5. 毕加索的艺术——Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选

    毕加索的艺术--Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选 官网: http://square.github.i ...

  6. android基于开源网络框架asychhttpclient,二次封装为通用网络请求组件

    网络请求是全部App都不可缺少的功能,假设每次开发都重写一次网络请求或者将曾经的代码拷贝到新的App中,不是非常合理,出于此目的,我希望将整个网络请求框架独立出来,与业务逻辑分隔开,这样就能够避免每次 ...

  7. 深入理解MVC C#+HtmlAgilityPack+Dapper走一波爬虫 StackExchange.Redis 二次封装 C# WPF 用MediaElement控件实现视频循环播放 net 异步与同步

    深入理解MVC   MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性 ...

  8. 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

    前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...

  9. 对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache

    虽然jquery的较新的api已经很好用了, 但是在实际工作还是有做二次封装的必要,好处有:1,二次封装后的API更加简洁,更符合个人的使用习惯:2,可以对ajax操作做一些统一处理,比如追加随机数或 ...

随机推荐

  1. Spring Boot 启动的时候遇到 java.lang.ClassNotFoundException: ch.qos.logback.classic.Level

    在刚开始接触spring boot的时候,想创建一个Hello World 的project. 但是创建完之后,Run as 'Spring Boot APP'的时候遇到这个错误. Level类存在于 ...

  2. https的基本原理,看完你的程序员女朋友再也不和你提分手了

    [http风险] 首先,我们来讲一下平时上网的时候,存在的风险. 初步接触过网络的同学都知道,网络上是很不安全的,尤其是各种公共场合的免费WIFI,以及手机上各种免费上网的万能钥匙.这些不安全因素会导 ...

  3. (转载)spring 之间的远程调用-Spring Http调用的实现

    原文:https://www.cnblogs.com/lewisat/p/6132082.html 1:Spring Http设计思想 最近在研究公司自己的一套rpc远程调用框架,看到其内部实现的设计 ...

  4. iText、poi操作word2007(读取,生成)

    关于生成word文件以及插入文字.表格.图片等功能,我使用了poi和itext,因为poi插入图片的jar包我在网上查并不是太完全,也可能我没找到如何使用,所以插入图片我用的是itext iText所 ...

  5. fensorflow 安装报错 DEPENDENCY ERROR

    1.错误信息 DEPENDENCY ERROR The target you are trying to run requires an OpenSSL implementation. Your sy ...

  6. b.WHERE使用中多行子查询(适用于in,any,all条件)

    b.多行子查询(适用于in,any,all条件)   //查询与SCOTT和MARTIN在同一个部门的同事的编号和名称   select empno,ename   from emp   where ...

  7. 极路由4pro(HC5962)安装python

    基本配置 其实极路由4.极路由4 pro.极路由B70都是一个型号的(HC5962) CPU:MT7621AT + MT7612EN + 7603EN 内存:256MB DDR3 RAM 闪存:128 ...

  8. echarts 柱状图和饼状图动态获取后台数据

    运用echarts来实现图表 1.首先下载echarts包  http://echarts.baidu.com/echarts2/doc/example.html,在这里我下载的是 2.将echart ...

  9. POJ 1942

    开始时竟然用了分情况讨论. 仔细思考一下,哈哈,发现不过是多重集合的组合数而已. #include <iostream> #include <cstdio> #include ...

  10. C#一个托付的样例

    C#中的函数能够被声明的一个托付所调用. 函数为静态方法.和托付声明的參数返回值要一致.   class Program { delegate float MathOperationDelegate( ...