Android -Volley通用请求

时间:2016-07-26 06:21:26

标签: android android-volley

如何在volley中编写单一通用请求,以处理任何类型的以下请求

  1. JsonObject
  2. JsonArray
  3. 图像
  4. 字符串。?

1 个答案:

答案 0 :(得分:0)

您可以根据使用情况制作自定义请求

public class CustomRequest extends Request<JSONObject> {

    private Response.Listener<JSONObject> listener;
    private Map<String, String> params;
    private String check_url;
    private Map<String, String> headers = new HashMap<String, String>();
    public CustomRequest(String url, Map<String, String> params,
                         Response.Listener<JSONObject> reponseListener,
                         Response.ErrorListener errorListener) {
        super(Method.GET, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
        check_url = url;
    }

    public CustomRequest(int method, String url, Map<String, String> params,
                         Response.Listener<JSONObject> reponseListener, Response.ErrorListener errorListener) {
        super(method, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
        check_url = url;
    }

    protected Map<String, String> getParams()
            throws com.android.volley.AuthFailureError {
        return params;
    };
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        return headers;
    }

    @Override
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
        try {
            String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
            return Response.success(new JSONObject(jsonString),HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JSONException je) {
            return Response.error(new ParseError(je));
        }
    }
    //In your extended request class
    @Override
    protected VolleyError parseNetworkError(VolleyError volleyError){
        if(volleyError.networkResponse != null && volleyError.networkResponse.data != null){
            VolleyError error = new VolleyError(new String(volleyError.networkResponse.data));
            NetworkResponse response = volleyError.networkResponse;
            Log.e("tag","parseNetworkError is ! null ");
            Log.e("tag","parseNetworkError status code : " + response.statusCode);
            Log.e("tag","parseNetworkError message : " + error.getLocalizedMessage());
            //volleyError = error;
        }else{
            Log.e("","parseNetworkError is null ");
            if (volleyError instanceof TimeoutError) {
                Log.e("tag","TimeoutError:parseNetworkError:" + volleyError.getLocalizedMessage());
            }else if (volleyError instanceof NoConnectionError) {
                Log.e("tag","NoConnectionError:parseNetworkError:" + volleyError.getLocalizedMessage());
            } else if (volleyError instanceof AuthFailureError) {
                Log.e("tag","AuthFailureError:parseNetworkError:" + volleyError.getLocalizedMessage());
            } else if (volleyError instanceof ServerError) {
                Log.e("tag","ServerError:parseNetworkError:" + volleyError.getLocalizedMessage());
            } else if (volleyError instanceof NetworkError) {
                Log.e("tag","NetworkError:parseNetworkError:" + volleyError.getLocalizedMessage());
            } else if (volleyError instanceof ParseError) {
                Log.e("tag","ParseError:parseNetworkError:" + volleyError.getLocalizedMessage());
            }
        }

        return volleyError;
    }
    @Override
    protected void deliverResponse(JSONObject response) {
        // TODO Auto-generated method stub
        listener.onResponse(response);
    }

}