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;
/**
* 定义一个异步网络客户端 默认超时未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
}
* @类描述: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;
/**
* 定义一个异步网络客户端 默认超时未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;
}
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));
}
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));
}
版权声明:本文为博主原创文章,未经博主允许不得转载。