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 ?
Réponses
Trop de publicités?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);
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;
}
};
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;
}
}
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;
}
}
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.