Android 在请求中添加自定义标头(例如,用于基本身份验证)

示例

如果您需要在排球请求中添加自定义标头,则初始化后便无法执行此操作,因为标头保存在私有变量中。

相反,您需要覆盖这样的getHeaders()方法Request.class:

new JsonObjectRequest(REQUEST_METHOD, REQUEST_URL, REQUEST_BODY, RESP_LISTENER, ERR_LISTENER) {
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        HashMap<String, String> customHeaders = new Hashmap<>();

        customHeaders.put("KEY_0", "VALUE_0");
        ...
        customHeaders.put("KEY_N", "VALUE_N");

        return customHeaders;
    }
};

参数说明:

  • REQUEST_METHOD-Request.Method.*常量之一。

  • REQUEST_URL -发送请求的完整URL。

  • REQUEST_BODY-JSONObject包含要发送的POST-Body的(或null)。

  • RESP_LISTENER-一个Response.Listener<?>对象,onResponse(T data)成功完成后将调用其方法。

  • ERR_LISTENER-一个Response.ErrorListener对象,其对象onErrorResponse(VolleyError e)将在请求失败时被调用。

如果要构建自定义请求,也可以在其中添加标头:

public class MyCustomRequest extends Request {
    ...
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        HashMap<String, String> customHeaders = new Hashmap<>();

        customHeaders.put("KEY_0", "VALUE_0");
        ...
        customHeaders.put("KEY_N", "VALUE_N");

        return customHeaders;
    }
    ...
}