package com.dh.foundation.utils;
import com.dh.foundation.volley.Request;
import com.dh.foundation.volley.RequestQueue;
import com.dh.foundation.volley.toolbox.Volley;
import com.dh.foundation.manager.FoundationManager;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
/**
* 网络请求工具类
* Created By: Seal.Wu
* Date: 2014/12/21
* Time: 23:26
*/
public class HttpNetUtils {
private static RequestQueue mRequestQueue= Volley.newRequestQueue(FoundationManager.getContext());;
private final static Gson gson = new Gson();
public static RequestQueue getRequestQueue() {
return mRequestQueue;
}
/**
* GET请求网络接口数据
*
* @param baseAddress 基地址
* @param requestParams 参数
* @param type 返回对象类类型
* @param requestListener 返回接收器
* @param <T> 返回对象类类型
* @deprecated
*/
public static synchronized <T> Request getData(String baseAddress, final RequestParams requestParams, final Type type, final HttpJsonRequest<T> requestListener) {
baseAddress += baseAddress.contains("?") ? "&" : "?";
final String url = baseAddress + (requestParams == null ? "" : requestParams.toString());
Request request = new NetRequest<T>(Request.Method.GET, url, requestParams, type, requestListener);
return addToExecuteQueue(request);
}
/**
* @param baseAddress 基地址
* @param requestParams 参数
* @param type 返回对象类类型
* @param requestListener 返回接收器
* @param <T> 返回对象类类型
* @deprecated 请求网络接口数据
*/
public static synchronized <T> Request postData(String baseAddress, final RequestParams requestParams, final Type type, final HttpJsonRequest<T> requestListener) {
Request request = new NetRequest<T>(Request.Method.POST, baseAddress, requestParams, type, requestListener);
return addToExecuteQueue(request);
}
/**
* Cancels all requests in this queue with the given tag. Tag must be non-null and equality is by identity.
*/
public static void cancelAll(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
/**
* 网络请求回调接收器
*
* @param <T> 对象类型
* @deprecated
*/
public interface HttpJsonRequest<T> {
void onSuccess(T t);
void onFailed(Throwable throwable);
void onFinished();
}
/**
* 打印网络请求链接地址
*
* @param baseAddress 头部基本地址
* @param params 参数
*/
public static void printCompleteUrl(String baseAddress, RequestParams params) {
baseAddress += baseAddress.contains("?") ? "&" : "?";
String url = baseAddress + (params.isRestStyle() ? "JsonData ======>"+params.getParamObjJsonData() : params.toString());
DLoggerUtils.i("HttpNetUtils=======>url= " + url);
}
/**
* @param <T> 对象类型
* @deprecated
*/
public static class SimpleHttpJsonRequest<T> implements HttpJsonRequest<T> {
@Override
public void onSuccess(T t) {
}
@Override
public void onFailed(Throwable throwable) {
}
@Override
public void onFinished() {
}
}
/**
* 网络请求回调监听器
*
* @param <T> 返回对象类型
*/
public static abstract class RequestListener<T> extends TypeToken<T> implements HttpJsonRequest<T> {
}
public static class SimpleRequestListener<T> extends RequestListener<T> {
@Override
public void onSuccess(T t) {
}
@Override
public void onFailed(Throwable throwable) {
}
@Override
public void onFinished() {
}
}
/**
* 添加请求任务到执行队列中
*
* @param request 请求任务
*/
public static Request<?> addToExecuteQueue(Request<?> request) {
return mRequestQueue.add(request);
}
/**
* 构建一个GET方式请求任务
*
* @param baseAddress 基地址
* @param requestParams 参数
* @param requestListener 返回接收器
* @param <T> 返回对象类类型
* @return 当前的请求对象
*/
public static synchronized <T> Request buildGetRequestTask(String baseAddress, final RequestParams requestParams, final RequestListener<T> requestListener) {
baseAddress += baseAddress.contains("?") ? "&" : "?";
final String url = baseAddress + (requestParams == null ? "" : requestParams.toString());
return new NetRequest<>(Request.Method.GET, url, requestParams, requestListener.getType(), requestListener);
}
/**
* 构建一个POST方式请求任务
*
* @param baseAddress 基地址
* @param requestParams 参数
* @param requestListener 返回接收器
* @param <T> 返回对象类类型
* @return 当前的请求对象
*/
public static synchronized <T> Request buildPostRequestTask(final String baseAddress, final RequestParams requestParams, final RequestListener<T> requestListener) {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(FoundationManager.getContext());
}
return new NetRequest<>(Request.Method.POST, baseAddress, requestParams, requestListener.getType(), requestListener);
}
/**
* 停止HttpNetUtils工具,关闭整个后台网络请求相关线程
*/
public static synchronized void stop() {
if (mRequestQueue != null) {
mRequestQueue.stop();
mRequestQueue = null;
}
}
}