android - 添加 header 谷歌 Volley 请求?

标签 android encoding header request android-volley

好吧,我是这个论坛的新人,如果你能帮助我,请帮帮我。我进行了搜索,但找不到如何将 header 添加到截击请求中。我有这段代码,我想添加 accept-encoding:gzip 和 api key 。我将不胜感激你的帮助。这是代码:

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

最佳答案

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

您可以在 getHeaders() 中添加标题。

编辑:如何在 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);

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

关于android - 添加 header 谷歌 Volley 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19216329/

相关文章:

android - 如何在覆盖其他图像后合并/保存图像?

android - 如何为 Android ecommerce_tracker.xml 创建用于跟踪器的 Google Analytics SDK v4

android - 获取简单列表项单选 - 获取所选项目

encoding - 不使用 "+/="(加号或等于)字符的 base64 编码?

c++ - 使用头文件而不是标准命名空间

android - 当我在后台服务中运行 Thread.sleep 时 Android 发生了什么

php - 相同字符串的 base64_encode() 值是否不同?

r - 导入 "special"个字符的 .csv 文件

未设置引荐来源网址的 HTML <a> 链接?

iphone - UITableView 标题 View 滚动