116 votes

Comment définir un en-tête personnalisé dans Volley Request

Comment définir des en-têtes personnalisés pour une requête Volley ? Pour l'instant, il est possible de définir le contenu du corps d'une requête POST. J'ai une simple requête GET, mais j'ai besoin de passer les en-têtes personnalisés en même temps. Je ne vois pas comment la classe JsonRequest le prend en charge. Est-ce possible ?

6voto

user2987953 Points 20

Je cherche également une solution à ce problème. voir quelque chose ici : http://developer.Android.com/training/volley/request.html

Est-ce une bonne idée d'utiliser directement ImageRequest au lieu d'ImageLoader ? Il semble qu'ImageLoader l'utilise en interne de toute façon. Est-ce qu'il manque quelque chose d'important autre que le support du cache d'ImageLoader ?

ImageView mImageView;
String url = "http://i.imgur.com/7spzG.png";
mImageView = (ImageView) findViewById(R.id.myImage);
...

// Retrieves an image specified by the URL, displays it in the UI.
mRequestQueue = Volley.newRequestQueue(context);;
ImageRequest request = new ImageRequest(url,
  new Response.Listener() {
      @Override
      public void onResponse(Bitmap bitmap) {
          mImageView.setImageBitmap(bitmap);
      }
  }, 0, 0, null,
  new Response.ErrorListener() {
      public void onErrorResponse(VolleyError error) {
          mImageView.setImageResource(R.drawable.image_load_error);
      }
  })   {
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String, String> params = new Map<String, String>();
        params.put("User-Agent", "one");
        params.put("header22", "two");

        return params;
    };
mRequestQueue.add(request);

5voto

AntuJorge Points 51

Essayez ceci

{
    @Override
       public Map<String, String> getHeaders() throws AuthFailureError {
           String bearer = "Bearer ".concat(token);
            Map<String, String> headersSys = super.getHeaders();
            Map<String, String> headers = new HashMap<String, String>();
            headersSys.remove("Authorization");
            headers.put("Authorization", bearer);
            headers.putAll(headersSys);
            return headers;
       }
};

4voto

Vous pouvez créer une classe de requête personnalisée qui étend la StringRequest et surcharger la méthode getHeaders() à l'intérieur comme ceci :

public class CustomVolleyRequest extends StringRequest {

    public CustomVolleyRequest(int method, String url,
                           Response.Listener<String> listener,
                           Response.ErrorListener errorListener) {
        super(method, url, listener, errorListener);
    }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String, String> headers = new HashMap<>();
        headers.put("key1","value1");
        headers.put("key2","value2");
        return headers;
    }
}

1voto

Navneet Boghani Points 17
public class CustomJsonObjectRequest  extends JsonObjectRequest
{
    public CustomJsonObjectRequest(int method, String url, JSONObject jsonRequest,Response.Listener listener, Response.ErrorListener errorListener)
    {
        super(method, url, jsonRequest, listener, errorListener);
    }

@Override
public Map getHeaders() throws AuthFailureError {
    Map headers = new HashMap();
    headers.put("AppId", "xyz");

    return headers;
}

}

1voto

Jack Points 109

En outre, j'aimerais partager une information que j'ai trouvée sur le site Web de la Commission européenne. Content-Type : En plus de

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
.
.
.
return params;
}

Je devais ajouter :

@Override
public String getBodyContentType() {
return /*(for exmaple)*/ "application/json";
}

Ne me demandez pas pourquoi, j'ai juste pensé que ça pourrait aider d'autres personnes qui n'arrivent pas à obtenir la Content-Type à droite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X