java - 为所有 volley 请求设置自定义 header

标签 java android android-volley

重写 getHeaders() 可以在必要时向请求添加海关 header 。 但是如果总是需要设置 X header 怎么办?例如静态身份验证 token 。

JsonObjectRequest req = new JsonObjectRequest(URL, new JSONObject(params),
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    setFollowButton(item);
                }
            }, null){
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Authorization", "Token XXXXXXXXXXXX");
            return headers;
        }
};

Application.getInstance().addToRequestQueue(req);

是否可以将 header 添加到发送到 addToRequestQueue 方法的请求中,而不是在我每次编写请求时都覆盖它?

最佳答案

我相信最好的方法是扩展您选择使用的 HttpStack 子类,然后拦截 performRequest() 方法,将您的全局 header 放入其中。

public class MyHurlStack extends HurlStack {
    @Override
    public HttpResponse performRequest(
            Request<?> request, Map<String, String> additionalHeaders)
            throws IOException, AuthFailureError {

        Map<String, String> headers = request.getHeaders();
        // put your global headers
        headers.put("Via", "netroid");
        headers.put("Accept-Charset", "UTF-8");
        headers.put("Origin", "http://netroid.cn/");

        return super.performRequest(request, additionalHeaders);
    }
}

public class MyHttpClientStack extends HttpClientStack {
    public MyHttpClientStack(HttpClient client) {
        super(client);
    }

    @Override
    protected void onPrepareRequest(HttpUriRequest request) throws IOException {
        // put your global headers
        request.setHeader("Via", "netroid");
        request.setHeader("Accept-Charset", "UTF-8");
        request.setHeader("Origin", "http://netroid.cn/");
        super.onPrepareRequest(request);
    }
}

RequestQueue初始化时,使用自定义的HttpStack代替。

if (stack == null) {
    if (Build.VERSION.SDK_INT >= 9) {
        stack = new HurlStack();
    } else {
        stack = new MyHttpClientStack(AndroidHttpClient.newInstance(userAgent));
    }
}

Network network = new BasicNetwork(stack);

关于java - 为所有 volley 请求设置自定义 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24877292/

相关文章:

android - 通过 linux 命令在 android 上使用 Ffmpeg

java - 等待 Async Volley 请求的结果并返回它

java - Android Volley 发布请求不起作用

java - 什么是 WindowInsets?

java - 从 Java 字节中提取半字节

java - 为什么会出现 "java.lang.IllegalArgumentException"错误?

android - 对齐具有相同宽度和高度的按钮 - Android

java - 如何在点击android上添加类似和不同条件按钮?

java - Spotify 安卓 SDK : INVALID_APP_ID

java - 如何将数据与身份验证数据一起存储在 Firebase 中