package com.dh.foundation.utils;
import android.accounts.NetworkErrorException;
import android.content.Context;
import com.dh.foundation.exception.DhBaseBeanError;
import com.dh.foundation.exception.DhRequestError;
import com.dh.foundation.utils.bluetooth.bluetoothbean.BaseBean;
/**
* 大含物流APP专用网络请求工具类
* Created By: Seal.Wu
* Date: 2015/7/16
* Time: 15:02
*/
public class DhHttpNetUtils {
/**
* 成功获取数据返回码
*/
private static final String SUCCESS_CODE = "1";
public static abstract class RequestListener<T> extends HttpNetUtils.RequestListener<T> implements CompatListener<T> {
@Override
public final void onSuccess(T t) {
if (t instanceof BaseBean) {
if (isGetDataSuccessfully((BaseBean) t)) {
onSuccessfully(t);
} else {
ToastUtils.toast(((BaseBean) t).getReturnMsg());
onFailure(new DhRequestError(new DhBaseBeanError((BaseBean) t)));
}
} else {
onSuccessfully(t);
}
}
@Override
public final void onFailed(Throwable throwable) {
ToastUtils.toast(throwable.getMessage());
onFailure(new DhRequestError(throwable));
}
@Override
public void onFailure(DhRequestError requestError) {
}
@Override
public void onFinished() {
ProgressDialogUtil.dismissProgressDialog();
}
}
/**
* GET请求网络接口数据
*
* @param context 上下文
* @param baseAddress 基地址
* @param requestParams 参数
* @param requestListener 返回接收器
* @param <T> 返回对象类类型
*/
public static synchronized <T> void getData(Context context, String baseAddress, RequestParams requestParams, RequestListener<T> requestListener) {
if (isNetStateUnavailable(context, requestListener)) return;
ProgressDialogUtil.showProgressDialog(context);
AutoPrintHttpNetUtils.getData(baseAddress, requestParams, requestListener).setTag(context.hashCode());
}
/**
* POST请求网络接口数据
*
* @param context 上下文
* @param baseAddress 基地址
* @param requestParams 参数
* @param requestListener 返回接收器
* @param <T> 返回对象类类型
*/
public static synchronized <T> void postData(Context context, String baseAddress, RequestParams requestParams, RequestListener<T> requestListener) {
if (isNetStateUnavailable(context, requestListener)) return;
ProgressDialogUtil.showProgressDialog(context);
AutoPrintHttpNetUtils.postData(baseAddress, requestParams, requestListener).setTag(context.hashCode());
}
/**
* 网络状态是否不可用
*/
private static <T> boolean isNetStateUnavailable(Context context, RequestListener<T> requestListener) {
if (!NetWorkDetector.isNetConnected()) {
ToastUtils.toast("无可用网络请检查网络设置");
if (requestListener != null) {
requestListener.onFailure(new DhRequestError(new NetworkErrorException("无可用网络请检查网络设置")));
requestListener.onFinished();
}
return true;
}
return false;
}
/**
* 获取数据监听器
*/
interface CompatListener<T> {
void onSuccessfully(T t);
void onFailure(DhRequestError requestError);
}
/**
* 是否成功地获取到期望的数据
*
* @param baseBean 服务器返回的bean
* @return true:代表成功
*/
public static boolean isGetDataSuccessfully(BaseBean baseBean) {
return StringUtils.equals(SUCCESS_CODE, baseBean.getReturnCode());
}
/**
* 结束所有以context为上下文的网络请求
*
* @param context 上下文
*/
public static void cancelAll(Context context) {
HttpNetUtils.cancelAll(context.hashCode());
}
}