@Override
  public void fetch(final VolleyNetworkFetchState fetchState, final Callback callback) {
    fetchState.submitTime = SystemClock.elapsedRealtime();

    final RawRequest request =
        new RawRequest(
            fetchState.getUri().toString(),
            new Response.Listener<byte[]>() {
              @Override
              public void onResponse(byte[] bytes) {
                fetchState.responseTime = SystemClock.uptimeMillis();

                try {
                  InputStream is = new ByteArrayInputStream(bytes);
                  callback.onResponse(is, bytes.length);
                } catch (IOException e) {
                  callback.onFailure(e);
                }
              }
            },
            new Response.ErrorListener() {
              @Override
              public void onErrorResponse(VolleyError volleyError) {
                callback.onFailure(volleyError);
              }
            });

    fetchState
        .getContext()
        .addCallbacks(
            new BaseProducerContextCallbacks() {
              @Override
              public void onCancellationRequested() {
                mRequestQueue.cancelAll(
                    new RequestFilter() {
                      @Override
                      public boolean apply(Request<?> candidate) {
                        return candidate != null
                            && request.getSequence() == candidate.getSequence();
                      }
                    });
              }
            });

    mRequestQueue.add(request);
  }
@param requestQueue The Volley {@link RequestQueue} to use
imagepipeline-backends/imagepipeline-volley/src/main/java/com/facebook/imagepipeline/backends/volley/VolleyNetworkFetcher.java