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


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

    }
        


  • 相关阅读:
    【SpringCloud构建微服务系列】分布式链路跟踪Spring Cloud Sleuth
    【算法】LRU算法
    细说分布式锁
    【Python】Python3.4+Matplotlib详细安装教程
    LoRaWAN协议(二)--LoRaWAN MAC数据包格式
    LoRaWAN移植笔记(一)__RTC闹钟链表的实现
    cJSON_json包的C语言解析库
    LoRaWAN协议(一)--架构解析
    STM32L051 PVD的调试
    以帧为存储单位的循环stack
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7063469.html
Copyright © 2020-2023  润新知