package com.wjwu.wpmain.net; import android.util.Log; 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.VolleyError; import com.android.volley.toolbox.HttpHeaderParser; import com.android.volley.toolbox.RequestFuture; import com.android.volley.toolbox.StringRequest; import com.google.gson.Gson; import com.wjwu.wpmain.lib_base.BaseApplication; import com.wjwu.wpmain.util.CommonUtils; import com.wjwu.wpmain.util.ResponseListenerSimple; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutionException; /** * Created by wjwu on 2015/8/29. */ public class RequestToolsSimple { private ResponseListenerSimple mListener; public RequestToolsSimple(ResponseListenerSimple listener) { mListener = listener; } private void cancelRequestByTag(String tag) { BaseApplication.getInstance().getRequestQueue().cancelAll(tag); } /*** * 发送网络请求 * * @param url 网络接口地址 * @param requestMethod 请求方法 默认为Request.Method.POST * @param requestObject 请求参数对象 */ public <T> void sendRequest(String url, int requestMethod, Object requestObject, String tag) { if (CommonUtils.checkNetworkEnable(BaseApplication.getInstance().getApplicationContext())) {//如果有网络,再从网络上获取一遍 getFromNetWork(url, requestMethod, requestObject, tag); return; } if (mListener != null) { mListener.error(null, false); } } private <T> void getFromNetWork(String url, int requestMethod, Object requestObject, String tag) { if (requestObject != null) { makeRequest(url, requestMethod, requestObject, tag); return; } makeStringRequest(url, requestMethod, requestObject, tag); } private <T> void makeJsonRequest(String url, Object requestObject, String tag) { if (requestObject != null) { makeRequest(url, Request.Method.POST, requestObject, tag); return; } makeStringRequest(url, Request.Method.POST, requestObject, tag); } private <T> void makeStringRequest(final String url, int requestMethod, final Object requestObject, String tag) { Log.e("", "wenjun request makeStringRequest url = " + url); StringRequest req = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.e("", "wenjun request makeStringRequest response = " + response); mListener.success(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { mListener.error(error, true); } }) { @Override public Map<String, String> getHeaders() throws AuthFailureError { HashMap<String, String> headers = new HashMap<String, String>(); headers.put("Content-Type", "application/json"); if (!url.contains(RequestUrl.login) && BaseApplication.getCookies() != null) { headers.put("Cookie", BaseApplication.getCookies()); } return headers; } }; req.setShouldCache(false); BaseApplication.getInstance().addToRequestQueue(req, tag); } private <T> void makeRequest(final String url, final int requestMethod, final Object requestObject, String tag) { Log.e("", "wenjun request makeRequest url = " + url + ", requestMethod = " + requestMethod); Request<String> req = new Request<String>(requestMethod, url, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { mListener.error(error, true); } }) { @Override public Map<String, String> getHeaders() throws AuthFailureError { HashMap<String, String> headers = new HashMap<String, String>(); if (!url.contains(RequestUrl.login) && BaseApplication.getCookies() != null) { headers.put("Cookie", BaseApplication.getCookies()); } return headers; } @Override protected Map<String, String> getParams() throws AuthFailureError { if (requestObject != null && requestObject instanceof HashMap) { return (HashMap<String, String>) requestObject; } return super.getParams(); } @Override protected Response<String> parseNetworkResponse(NetworkResponse response) { try { return Response.success(new String(response.data, HttpHeaderParser.parseCharset(response.headers)), null); } catch (Exception e) { return Response.error(new ParseError(e)); } } @Override protected void deliverResponse(String response) { Log.e("", "wenjun request makeRequest response = " + response); mListener.success(response); } }; req.setShouldCache(false); BaseApplication.getInstance().addToRequestQueue(req, tag); } public Object makeSyncRequest(final String url, final int requestMethod, final Object requestObject, String tag) { RequestFuture<String> future = RequestFuture.newFuture(); StringRequest request = new StringRequest(requestMethod, url, future, future) { @Override protected Map<String, String> getParams() throws AuthFailureError { Log.e("", "wenjun request makeRequest getPostParams requestObject = " + new Gson().toJson(requestObject)); if (requestObject != null && requestObject instanceof HashMap) { return (HashMap<String, String>) requestObject; } return super.getParams(); } @Override public Map<String, String> getHeaders() throws AuthFailureError { HashMap<String, String> headers = new HashMap<String, String>(); if (!url.contains(RequestUrl.login) && BaseApplication.getCookies() != null) { headers.put("Cookie", BaseApplication.getCookies()); } return headers; } }; request.setRetryPolicy(new DefaultRetryPolicy(CommonUtils.getConnectTimeOutTime(), 1, 1.0F)); request.setShouldCache(false); BaseApplication.getInstance().addToRequestQueue(request, tag); Log.e("", "wenjun request makeJsonRequestForCache end"); Object result; try { result = future.get(); } catch (InterruptedException e) { result = e; e.printStackTrace(); } catch (ExecutionException e) { result = e; e.printStackTrace(); } return result; } }