2013-10-07 6 views
3

Eh bien, je suis nouveau dans ce forum, s'il vous plaît si vous pouviez m'aider dans ce domaine. J'ai cherché mais je ne pouvais pas trouver comment ajouter des en-têtes à une demande de volée. J'ai ce code et je veux ajouter l'accept-encoding: gzip et la clé d'api. J'apprécierais votre aide. voici le code:ajouter des entêtes google volley demande?

type = "cafe"; 
url = "https://maps.googleapis.com/maps/api/place/search/json?location=" + Global.location + "&radius=500&types=" + type + "&sensor=true&key="+placesKey; 


RequestQueue rq = Volley.newRequestQueue(context); 

JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.GET, url, null, 
new Response.Listener<JSONObject>() { 
@Override 
public void onResponse(JSONObject response) { 

List<Review> reviews = new ArrayList<Review>(); 
reviews = Parsing.ParseReviews(response); 
} 
}, new Response.ErrorListener() { 

@Override 
public void onErrorResponse(VolleyError error) { 
Toast.makeText(context, error.toString(), Toast.LENGTH_SHORT).show(); 

} 
}); 

rq.add(jsonRequest); 
+1

Ceci est un doublon possible. Découvrez la réponse ici: http://stackoverflow.com/questions/17049473/how-to-set-custom-header-in-volley-request – SBerg413

Répondre

2
JsonObjectRequest jsObjectRequest = new JsonObjectRequest(
      Request.Method.POST, 
      url, 
      jsonRequest, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        Log.d(TAG, "Respuesta en JSON: " + response.toString()); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Log.d(TAG, "Error Respuesta en JSON: " + error.toString()); 
       } 
      } 
    ){ 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      //return super.getHeaders(); 
      Map<String, String> params = new HashMap<>(); 
      params.put("Content-Encoding", "gzip"); 
      return params; 
     } 
    }; 

    VolleySingleton.getInstance(context).addToRequestQueue(jsObjectRequest); 

vous pouvez ajouter des en-têtes dans getHeaders().

Edit: Comment encode gzip

JsonObjectRequest jsObjectRequest = new JsonObjectRequest(
      /*same here*/ 
    ){ 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      Map<String, String> params = new HashMap<>(); 
      params.put("Content-Encoding", "gzip"); 
      return params; 
     } 

     @Override 
     public byte[] getBody() { 
      try{ 
       return Encode.gzip(super.getBody()); 
      }catch(IOException e){ 
       Log.d(TAG, e.getMessage()); 
       return super.getBody(); 
      } 
     } 
    }; 

    VolleySingleton.getInstance(context).addToRequestQueue(jsObjectRequest); 

Encode GZip

public static byte[] gzip(byte[] bytes) throws IOException{ 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    GZIPOutputStream gzos = null; 

    try { 
     gzos = new GZIPOutputStream(baos); 
     gzos.write(bytes); 
    }finally { 
     if (gzos != null){ 
      try{ 
       gzos.close(); 
      }catch (IOException ignore) {} 
     } 
    } 

    return baos.toByteArray(); 
} 
Questions connexes