VolleyManager
import android.content.Context;
import android.graphics.Bitmap;
import android.widget.ImageView;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.shanjin.android.omeng.client.app.OmengContext;
import org.json.JSONObject;
import java.util.Map;
public class VolleyManager {
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static class VolleyManagerHolder {
private static final VolleyManager INSTANCE = new VolleyManager(OmengContext.getInstance());
}
/**
* @param context
*/
private VolleyManager(Context context) {
mRequestQueue = Volley.newRequestQueue(context);
}
/**
* 单例模式(静态内部类)
*
* @return VolleyManager instance
*/
public static VolleyManager newInstance() {
return VolleyManagerHolder.INSTANCE;
}
private <T> Request<T> add(Request<T> request) {
return mRequestQueue.add(request);//添加请求到队列
}
/**
* @param tag
* @param url
* @param listener
* @param errorListener
* @return
*/
public StringRequest StrRequest(Object tag, String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
StringRequest request = new StringRequest(url, listener, errorListener);
request.setTag(tag);
add(request);
return request;
}
/**
* @param tag
* @param method
* @param url
* @param listener
* @param errorListener
* @return
*/
public StringRequest StrRequest(Object tag, int method, String url, Response.Listener<String> listener,
Response.ErrorListener errorListener) {
StringRequest request = new StringRequest(method, url, listener, errorListener);
request.setTag(tag);
add(request);
return request;
}
/**
* ImageRequest
*
* @param tag
* @param url
* @param listener
* @param maxWidth
* @param maxHeight
* @param scaleType
* @param decodeConfig
* @param errorListener
* @return
*/
public ImageRequest ImageRequest(Object tag, String url, Response.Listener<Bitmap> listener,
int maxWidth, int maxHeight, ImageView.ScaleType scaleType,
Bitmap.Config decodeConfig, Response.ErrorListener errorListener) {
ImageRequest request = new ImageRequest(url, listener, maxWidth, maxHeight, scaleType,
decodeConfig, errorListener);
request.setTag(tag);
add(request);
return request;
}
/**
* ImageLoader 图片默认大小
*
* @param imageView
* @param imgViewUrl
* @param defaultImageResId
* @param errorImageResId
*/
public void ImageLoaderRequest(ImageView imageView, String imgViewUrl, int defaultImageResId,
int errorImageResId) {
ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, defaultImageResId,
errorImageResId);
mImageLoader.get(imgViewUrl, listener);
}
/**
* ImageLoader 指定图片大小
*
* @param imageView
* @param imgViewUrl
* @param defaultImageResId
* @param errorImageResId
* @param maxWidth
* @param maxHeight
*/
public void ImageLoaderRequest(ImageView imageView, String imgViewUrl, int defaultImageResId,
int errorImageResId, int maxWidth, int maxHeight) {
ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, defaultImageResId,
errorImageResId);
mImageLoader.get(imgViewUrl, listener, maxWidth, maxHeight);
}
/**
* Get方法
*
* @param tag
* @param url
* @param clazz
* @param listener
* @param errorListener
* @param <T>
* @return
*/
public <T> GsonRequest<T> GsonGetRequest(Object tag, String url, Class<T> clazz, Response.Listener<T> listener,
Response.ErrorListener errorListener) {
GsonRequest<T> request = new GsonRequest<T>(url, clazz, listener, errorListener);
request.setTag(tag);
add(request);
return request;
}
/**
* Post方式1:Map参数
*
* @param tag
* @param params
* @param url
* @param clazz
* @param listener
* @param errorListener
* @param <T>
* @return
*/
public <T> GsonRequest<T> GsonPostRequest(Object tag, Map<String, String> params, String url,
Class<T> clazz, Response.Listener<T> listener,
Response.ErrorListener errorListener) {
GsonRequest<T> request = new GsonRequest<T>(Request.Method.POST, params, url, clazz, listener, errorListener);
request.setTag(tag);
add(request);
return request;
}
/**
* Post方式2:json字符串
*
* @param url
* @param jsonObject
* @param listener
* @param errorListener
*/
public void PostjsonRequest(Object tag, String url, JSONObject jsonObject, Response.Listener<JSONObject> listener,
Response.ErrorListener errorListener) {
JsonObjectRequest jsonObjectRequest;
jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, jsonObject,
listener, errorListener);
jsonObjectRequest.setTag(tag);
add(jsonObjectRequest);
}
/**
* 取消请求
*
* @param tag
*/
public void cancel(Object tag) {
mRequestQueue.cancelAll(tag);
}
}
import com.android.volley.AuthFailureError;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.lemon.android.library.util.AESUtil;
import com.lemon.android.library.util.LogUtil;
import com.lemon.android.library.util.MD5;
import com.lemon.android.library.util.ResourceUtils;
import com.lemon.android.library.util.VersionUtil;
import com.shanjin.android.client.omeng.user.util.UserCountInfoUtil;
import com.shanjin.android.omeng.client.app.OmengContext;
import android.util.ArrayMap;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
public class GsonRequest<T> extends Request<T> {
private final Listener<T> mListener;
private static Gson mGson = new Gson();
private Class<T> mClass;
private Map<String, String> mParams;//post Params
private TypeToken<T> mTypeToken;
public GsonRequest(int method, Map<String, String> params, String url, Class<T> clazz, Listener<T> listener,
ErrorListener errorListener) {
super(method, url, errorListener);
mClass = clazz;
mListener = listener;
mParams = params;
setMyRetryPolicy();
}
public GsonRequest(int method, Map<String, String> params, String url, TypeToken<T> typeToken, Listener<T> listener,
ErrorListener errorListener) {
super(method, url, errorListener);
mTypeToken = typeToken;
mListener = listener;
mParams = params;
setMyRetryPolicy();
}
private void setMyRetryPolicy() {
setRetryPolicy(new DefaultRetryPolicy(30000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
}
public GsonRequest(String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener) {
this(Method.GET, null, url, clazz, listener, errorListener);
}
public GsonRequest(String url, TypeToken<T> typeToken, Listener<T> listener, ErrorListener errorListener) {
this(Method.GET, null, url, typeToken, listener, errorListener);
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return mParams;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> mHeaders = new ArrayMap<String, String>();
String clientType = "1";
String apiVersion = "1.0";
String version = VersionUtil.getVersionName(OmengContext.getInstance());
String currentTime = String.valueOf(System.currentTimeMillis());
String encryptedParams = "";
try {
encryptedParams = AESUtil.parseByte2HexStr(
AESUtil.encrypt(clientType + "|" + version + "|" + apiVersion + "|" + currentTime, MD5.Md5(currentTime)));
} catch (Exception e) {
encryptedParams = "";
}
// mHeaders.put("Content-Type", "application/json; charset=utf-8");
mHeaders.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
mHeaders.put("UUID", ResourceUtils.getDeviceId(OmengContext.getInstance()));
mHeaders.put("CLIENT_TYPE", clientType);
mHeaders.put("VERSION", version);
mHeaders.put("APIVERSION", apiVersion);
mHeaders.put("TIME", currentTime);
mHeaders.put("PHONE", UserCountInfoUtil.getUserLoginPhoneString(OmengContext.getInstance()));
mHeaders.put("POSTFIX", encryptedParams);
try {
mHeaders.put("MODEL", URLEncoder.encode(android.os.Build.MODEL, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
mHeaders.put("CHANNEL", ResourceUtils.getUmengChannelMetaData(OmengContext.getInstance()));
mHeaders.put("SYSTEM", android.os.Build.VERSION.RELEASE);
mHeaders.put("CLIENT_FLAG", "1");
return mHeaders;
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
LogUtil.e("Volley", "response = " + jsonString);
if (mTypeToken == null)
return Response.success(mGson.fromJson(jsonString, mClass),
HttpHeaderParser.parseCacheHeaders(response));
else
return (Response<T>) Response.success(mGson.fromJson(jsonString, mTypeToken.getType()),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
}
@Override
protected void deliverResponse(T response) {
mListener.onResponse(response);
}
}
发送请求
String url = AppConstant.BASE_URL + AppConstant.BANNER_ACTIVITY_BASE_URL;
Map<String, String> params = new HashMap<String, String>();
params.put("entrance", "index_list");
VolleyManager.newInstance().GsonPostRequest(TAG, params, url, ClientActivityRootBean.class, new Listener<ClientActivityRootBean>() {
@Override
public void onResponse(ClientActivityRootBean bean) {
if (bean.isSuccess()) {
Message message = mHandler.obtainMessage(GET_BEAN_DATA_SUCCESS, bean);
mHandler.sendMessage(message);
} else {
mHandler.sendEmptyMessage(GET_BEAN_DATA_ERROR);
}
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
mHandler.sendEmptyMessage(GET_BEAN_DATA_ERROR);
}
});