Volley Gson

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);
    }
}


GsonRequest

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);
        }
});




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值