Comment télécharger le fichier en utilisant la bibliothèque Volley dans android?

J'ai déjà une sous-classe de la Demande qui est utilisé pour le post de http pour le serveur. Le problème est que je n'ai aucune idée sur comment puis-je ajouter un paramètre pour un fichier. L'affichage de la chaîne du serveur est simple. mais j'ai besoin d'ajouter un fichier comme un autre paramètre. Comment puis-je le faire?

public class AddNewPetRequest extends Request<JSONObject> {

    private Response.Listener<JSONObject> listener;

    public AddNewPetRequest(String url, Map<String, String> params,
                                Response.Listener<JSONObject> reponseListener, Response.ErrorListener errorListener) {
        super(Request.Method.GET, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
    }

    public AddNewPetRequest(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;
    }

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

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

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

MISE À JOUR QUESTION:
J'ai suivi le modèle de l'une des réponses ici dans stackoverflow et je suis venu avec cette mise en œuvre:

public class MultipartRequest extends Request<String> {
private MultipartEntity entity = new MultipartEntity();
private final Response.Listener<String> mListener;
private HashMap<String, String> mParams;
public MultipartRequest(String url, Response.ErrorListener errorListener, Response.Listener<String> listener)
{
super(Method.POST, url, errorListener);
mListener = listener;
buildMultipartEntity();
}
private void buildMultipartEntity()
{
entity.addPart("profile_picture", new FileBody(new File("/storage/emulated/0/Pictures/VSCOCam/2015-07-31 11.55.14 1.jpg")));
try
{
entity.addPart("user_id", new StringBody("15"));
entity.addPart("name", new StringBody("Bogs"));
entity.addPart("gender", new StringBody("Male"));
entity.addPart("date_birth", new StringBody("1999-12-5"));
entity.addPart("breed", new StringBody("monkey"));
}
catch (UnsupportedEncodingException e)
{
VolleyLog.e("UnsupportedEncodingException");
}
}
@Override
public String getBodyContentType()
{
return entity.getContentType().getValue();
}
@Override
public byte[] getBody() throws AuthFailureError
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try
{
entity.writeTo(bos);
}
catch (IOException e)
{
VolleyLog.e("IOException writing to ByteArrayOutputStream");
}
return bos.toByteArray();
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response)
{
return Response.success("Uploaded", getCacheEntry());
}
@Override
protected void deliverResponse(String response)
{
mListener.onResponse(response);
}

Quand j'ajoute cette demande à mon file d'attente de demandes, de répondre à un com.android.le volley.TimeoutError mais si une vérification de la base de données, la requête s'exécute et ajouter des éléments à la table, mais le profil de de téléchargement d'image a seulement 1 octet de taille. un autre problème, mon élément de base de données a ajouté deux fois.

PROBLÈME RÉSOLU j'ai déjà résolu ce problème en définissant sa demande du temps. ce qui s'est passé c'est que je ne suis pas en mesure d'obtenir la réponse de mon serveur après le délai d'expiration par défaut de volley-bibliothèque afin de mettre mon délai d'attente en appelant et en paramètre de cette méthode à ma Demande de File d'attente:

multipartRequest.setRetryPolicy(new DefaultRetryPolicy(1000 * 60, DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

source d'informationauteur Earwin delos Santos