android-async-http开源框架的详细解释

Android网络请求库:android-async-http开源框架

之前有一篇描述了客户端请求服务器端的方式—Post的请求方式。今天介绍一个请求服务器的一个开源库—android-async-http库。

1. 概念:

这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法(匿名内部类)处理请求结果。

2. 特征:

(1).处理异步Http请求,并通过匿名内部类处理回调结果

**(2).**Http异步请求均位于非UI线程,不会阻塞UI操作。

(3).通过线程池处理并发请求处理文件上传、下载,响应结果自动打包JSON格式。

3. 相应的核心类的介绍:

(1).AsyncHttpResponseHandler:请求返回处理成功、失败、开始、完成等自定义的消息的类。

(2).BinaryHttpResponseHandler:AsyncHttpResponseHandler的子类。该类是一个字节流返回处理的类。用于处理图片等。

(3).JsonHttpResponseHandler:AsyncHttpResponseHandler的子类。这是一个服务器与客户端之间用Json数据交流时使用的类。客户端请求服务器的参数是Json数据类型的,服务器返回给客户端的数据也是Json数据类型的。

(4).RequestParams:封装参数处理的类。将客户端请求的参数封装在该类中。

(5).AsyncHttpClient:异步客户端请求的类。

(6).SyncHttpClient:同步客户端请求的类。AsyncHttpClient的子类。

注意:HttpUtil这个类主要列出了我们常用的get方法,在要使用的地方,调用该类就行了。需要添加android-async-http-1.4.7.jar文件包。

代码如下:

(1).AsyncJsonUtilGet.java

package com.chengdong.su.util.get;

import org.apache.http.Header;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.widget.Toast;

import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;

/**
 * 异步请求服务器
 *
 * @author scd
 *
 */
public class AsyncJsonUtilGet {
    private static final String URL = "";
    private Context mContext;

    /**
     * 构造方法
     *
     * @param mContext
     */
    public AsyncJsonUtilGet(Context mContext) {
        super();
        this.mContext = mContext;
    }

    /**
     * 邮箱注册
     */
    public void emailRegister(String email, String password, String username) {

        RequestParams params = new RequestParams();
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("email", email);
            jsonObject.put("password", password);
            jsonObject.put("username", username);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        params.put("jsonObject", jsonObject);
        // get请求方式
        HttpUtil.get(URL, params, new JsonHttpResponseHandler() {

            @Override
            public void onFailure(int statusCode, Header[] headers,
                    Throwable throwable, JSONObject errorResponse) {
                super.onFailure(statusCode, headers, throwable, errorResponse);
                Toast.makeText(mContext, "Register failed!", Toast.LENGTH_SHORT)
                        .show();
            }

            @Override
            public void onSuccess(int statusCode, Header[] headers,
                    JSONObject response) {
                String errorCode = response.optString("ErrorCode");
                // 表示请求成功
                if (errorCode.equals("0")) {
                    Toast.makeText(mContext, "注册成功", Toast.LENGTH_LONG).show();
                    // response:返回的数据都在这个参数中,根据业务要求进行实现功能
                } else {
                    super.onSuccess(statusCode, headers, response);
                }
            }

        });

    }

}

(2).HttpUtil.java工具类:注:需要添加jar包

package com.chengdong.su.util.get;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
import java.util.Set;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.BinaryHttpResponseHandler;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;

public class HttpUtil {
    public static final String STATUS_NETWORK = "network_available";
    private static AsyncHttpClient client = new AsyncHttpClient();

    static {
        client.setTimeout(11000);
    }

    public static void get(String urlString, AsyncHttpResponseHandler res) {
        client.get(urlString, res);
    }

    public static void get(String urlString, RequestParams params,
            AsyncHttpResponseHandler res) {
        client.get(urlString, params, res);
    }

    public static void get(String urlString, JsonHttpResponseHandler res)

    {
        client.get(urlString, res);
    }

    public static void get(String urlString, RequestParams params,
            JsonHttpResponseHandler res)

    {
        client.get(urlString, params, res);
    }

    public static void get(String uString, BinaryHttpResponseHandler bHandler)

    {
        client.get(uString, bHandler);
    }

    public static AsyncHttpClient getClient() {
        return client;
    }

    public static boolean isNetworkConnected(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;
    }

    // 从UrlConnection中获取文件名称
    public static String getFileName(String url) {
        String fileName = null;
        boolean isOK = false;
        try {
            URL myURL = new URL(url);

            URLConnection conn = myURL.openConnection();
            if (conn == null) {
                return null;
            }
            Map<String, List<String>> hf = conn.getHeaderFields();
            if (hf == null) {
                return null;
            }
            Set<String> key = hf.keySet();
            if (key == null) {
                return null;
            }

            for (String skey : key) {
                List<String> values = hf.get(skey);
                for (String value : values) {
                    String result;
                    try {
                        result = value;
                        int location = result.indexOf("filename");

                        if (location >= 0) {
                            result = result.substring(location
                                    + "filename".length());
                            result = java.net.URLDecoder
                                    .decode(result, "utf-8");
                            result = result.substring(result.indexOf("\"") + 1,
                                    result.lastIndexOf("\""));

                            fileName = result
                                    .substring(result.indexOf("=") + 1);
                            isOK = true;
                        }
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }
                if (isOK) {
                    break;
                }
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fileName;
    }

}
时间: 2024-12-20 12:19:33

android-async-http开源框架的详细解释的相关文章

Android酷炫开源框架

Android酷炫实用的开源框架 1.Side-Menu.Android 分类侧滑菜单,Yalantis 出品. 项目地址:https://github.com/Yalantis/Side-Menu.Android 2.Context-Menu.Android 可以方便快速集成漂亮带有动画效果的上下文菜单,Yalantis出品. 项目地址:https://github.com/Yalantis/Context-Menu.Android 3.Pull-to-Refresh.Rentals-Andr

Android中ViewHolder模式开发的详细解释

Android开发中ViewHolder模式开发的详细解释: 1.ViewHolder的解释: (1).只是一个静态类,不是Android的API方法. (2).它的作用就在于减少不必要的调用findViewById,然后把对底下的控件引用存在ViewHolder里面,再在View.setTag(holder)把它放在view里,下次就可以直接取了. 2.convertView中的TAG: (1).Tag不像ID是用标示view的.Tag从本质上来讲是就是相关联的view的额外的信息.它们经常用

Android 优秀的开源框架整理

第一部分:系统架构 thinkAndroid https://github.com/white-cat/ThinkAndroid ThinkAndroid是一个免费的开源的.简易的.遵循Apache2开源协议发布的Android开发框架. xUtils https://github.com/wyouflf/xUtils xUtils 包含了很多实用的android工具.支持大文件上传,更全面的http请求协议支持. Afinal https://github.com/yangfuhai/afin

Android蓝牙开发开源框架 代码案例

这篇文章我早早就想写了,一直忘记了.之前一开始开发Android就搞蓝牙开发,好头大!研究了半个月才能搞定.现在自己整理出了蓝牙开发框架,这框架比较简单,不过希望能帮助蓝牙开发的朋友们.当然个人技术很菜,不足之处请指导. 蓝牙开步骤: 1.了解,蓝牙API共有五个类,其中需要撑握三个类: BluetoothAdapter(蓝牙适配器):该类主要获取蓝牙信息,比较打开蓝牙.获取本机mac地址.配对的蓝牙信息.等等; BluetoothDevice(蓝牙设备):如果连接非安卓设备,该类主要是初始服务

Android编程入门--开源框架OKHttp

官网地址:http://square.github.io/okhttp/ github地址:square/okhttp 参考博客:Android okHttp网络请求之Get/Post请求 参考博客:Android okHttp网络请求之文件上传下载 session相关博客:利用okhttp框架实现包含验证码的用户登录,保持session操作 cookie相关博客:OkHttp3的基本用法 创建一个工具类 OkHttpManager 初始化方法 /** * OkHttpManager */ pu

BAT大牛 带你深度剖析Android 10大开源框架

第1章 课程介绍(提供bat内推和简历指导) 1-1 课程导学 第2章 Okhttp网络库深入解析和相关面试题分析 2-1 okhttp框架流程分析 2-2 okhttp同步请求方法 2-3 okhttp异步请求方法 2-4 okhttp同步请求流程和源码分析 2-5 okhttp异步请求流程和源码分析-1 2-6 okhttp异步请求流程和源码分析-2 2-7 okhttp任务调度核心类dispatcher解析-1 2-8 okhttp任务调度核心类dispatcher解析-2 2-9 okh

Android编程入门--开源框架EventBus

github地址:greenrobot / EventBus 参考博客:EventBus3.0详解 参考博客: Android事件总线(一)EventBus3.0用法全解析 参考博客:Android消息传递之EventBus 3.0使用详解 先准备订阅 EventBus.getDefault().register(this); @Subscribe public void onMainEvent(MessageEvent messageEvent) { if (messageEvent.getM

Android编程入门--开源框架ButterKnife

参考博客:ButterKnife使用详解 (7.0版本) 参考博客:Android注解使用之ButterKnife 8.0注解使用介绍 参考博客:Android Butterknife 8.4.0 使用方法总结 使用ButterKnife Zelezny插件 参考博客:Android ButterKnife Zelezny插件的安装与使用(可视化一键生成) 下载如图: 使用如图: 注:注解方法不能正常运行. 尝试解决: 查看官方编译配置,如下: dependencies { compile 'c

Android之基于开源框架的多线程下载

下面是一个完整的案例,实现的功能是多线程下载服务端的资源数据,感觉不错,推荐给大家! http://bbs.itcast.cn/thread-78561-1-1.html