In the previous Volley-related post, I mentioned some reservations in some more complex use cases.
Volley, in its current state, is not convenient when you need to:
- Add headers to your requests
- Add a body the some requests
- Customize ImageRequest (for authentication…)
- Define a common behavior to all your requests
The code presented here is a shot at trying to solve these issues. It can be found here: https://github.com/smaspe/ExtVolley
No modification is made to Volley, so this comes as an compatible addition.
ImageLoader in Volley uses
Requests cannot be modified, as
ImageRequest is explicitly instanciated. The solution here is to make a new
ImageLoader that takes a factory as a parameter. I am not quite satisfied with the solution I have come up with so far, as there is a lot of duplicate code from
ImageLoader (which obviously was not designed to be extended).
The relevant parts:
The factory is quite simple, it just needs to provide a
ImageRequestFactory is simply
DelegatingRequest is a class that extends
Request, adds getters and setters for body and headers, and delegates the handling of the network response to a
This way, the
DelegatingRequest is the only type of request required, it is therefore easier to extend for specific behaviors.
NetworkResponseParser is in charge of handling the actual work, making it easy to add support to new Response types.
For instance, a
String parser looks like that
As you can see, it is now easy to create an
ImageLoader that can use any
An example of the use of
It is possible to add headers, content values, to change the body and the body content type.
I don’t find Volley particularly easy to extend, in particular the image loader part. I expect the dev team to come up with a better solution for this quite soon.
I also find the current
Request extension system quite clumsy, lots of code can easily get duplicated as there is no separation between the request typing and the response parsing. I find (obviously) my solution rather more elegant, and more importantly more easily extendable.